Instead of using a DateTime and changing it, take the current time when you start teh timer, and set a target time:
private DateTime target;
...
target = DateTime.Now.AddMinutes(30);
Timer1.Start();
Then, in your Tick handler, check the difference:
void Timer1_Tick(object sender, EventArgs e)
{
TimeSpan diff = target - DateTime.Now;
if (diff.TotalSeconds <= 0)
{
myTextBox.Text = "Done!";
Timer1.Stop();
}
else
{
myTextBox.Text = ((int) diff.TotalSeconds).ToString();
}
}
That way, it will work with almost any offset, and be a lot more accurate.