【发布时间】:2010-09-10 11:49:10
【问题描述】:
我正在使用以下代码在调用方法 A 的 N 秒后调用方法 B。如果方法 A 在 N 秒超时内再次调用,我必须将时间重置为 N 秒。
我不能在我的项目中引用 System.Windows.Form,所以我不能使用 System.Windows.Form.Timer。
方法 B 必须在调用 A 的同一个线程中调用。
private void InitTimer()
{
timer = new BackgroundWorker();
timer.WorkerSupportsCancellation = true;
timer.WorkerReportsProgress = true;
timer.DoWork += delegate(object sender, DoWorkEventArgs e)
{
var st = DateTime.Now;
while (DateTime.Now.Subtract(st).TotalSeconds < 10)
{
if (timer.CancellationPending)
{
e.Cancel = true;
return;
}
}
};
timer.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs e)
{
if (!e.Cancelled)
{
MethodB();
}
else
{
timer.RunWorkerAsync();
}
};
}
public void MethodA()
{
if (timer.IsBusy)
timer.CancelAsync();
else
timer.RunWorkerAsync();
}
public void MethodB()
{
//do some stuff
}
实际上代码可以工作,但我认为这有点令人困惑。你知道是否有达到相同结果的最佳实践吗?
【问题讨论】:
标签: c# .net multithreading c#-3.0