As far as in this block of code you might get an error:
private void timer1_Tick(object sender, EventArgs e)
{
uptimeTxt.Text = ts.Days + "d" + ts.Hours + "h" +
ts.Minutes + "m" + ts.Seconds + "s";
}
Because you try to update upimeTxt text value from a particular thread . which is not a UI thread.
So basically , you must perform uptimeTxt.Text update workflow in UI synchronized code:
if(uptimeTxt.InvokeRequired){
this.Invoke((MethodInvoker)delegate {
someLabel.Text = newText;
}
})