Create a member variable, startTime, and set it to DateTime.Now in StartTimer. Then, in Initial_Wait, subtract startTime from DateTime.Now and check the TotalSeconds. If greater than 60 seconds, stop the timer. Alternatively, you could use a counter approach (as you appear to be partially doing with your member variable "i").
Also, based on the sample code you provided, you will not have one timer, but many which will execute alongside each other. Move myDispatchTimer out of the functions and put only one at the class level (this is called a member variable). Only create a new instance of it once. Calling Stop() on a new instance will not stop the previous instance from running.
EDIT: Here's an example of some code you could use:
private System.Windows.Threading.DispatchTimer timer = new System.Windows.Threading.DispatcherTimer();
private bool firstRun = true;
private DateTime startTime = DateTime.MinValue;
private void StartTimer()
{
startTime = DateTime.Now;
timer.Interval = TimeSpan.FromSeconds(10);
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
if (firstRun)
{
timer.Interval = TimeSpan.FromSeconds(5);
firstRun = false;
}
if (DateTime.Now.Subtract(startTime).TotalSeconds > 60)
{
timer.Stop();
}
else
{
var t = new System.Threading.Thread(new System.Threading.ThreadStart(delegate()
{
}));
t.Start();
}
}