应用程序的主线程正在做一些工作。
还有一个定时器,应该每隔10分钟调用某个方法,该方法应该以异步方式运行。
你能否给我一个好的例子来组织这个?
应用程序的主线程正在做一些工作。
还有一个定时器,应该每隔10分钟调用某个方法,该方法应该以异步方式运行。
你能否给我一个好的例子来组织这个?
我不建议使用带有循环和睡眠的显式线程,这是一种不好的做法并且很丑陋。因此,有定时器类可用:
如果这不是一个GUI应用程序,则可以使用System.Threading.Timer在不同的线程上周期性地执行代码。
如果这是一个WinForms/WPF应用程序,请查看System.Windows.Forms.Timer 和 System.Windows.Threading.DispatcherTimer。它们非常方便,因为它们在GUI线程上执行其代码,因此无需显式调用Invoke
。
每个链接中也包含相应的示例。
System.Threading.Timer
,并显式地使用Invoke
来进行更新部分。无论如何,了解不同情况下可用的工具是很好的。 - Tudor最简单的方法是调用一个大函数,在每个动作之间休眠10分钟。这不会阻塞任何东西,因为它在另一个线程中运行。
在.NET 4中,您可以使用Task
类来实现:
Task t = Task.Factory.StartNew(() => { /* your code here */ });
// or
Task t = Task.Factory.StartNew(YourFunctionHere);
void YourFunction() {
while (someCondition) {
// do something
Thread.Sleep(TimeSpan.FromMinutes(10));
}
}
.NET 4.5
中的 Task.Delay
(以及 async
和 await
)还没有发布(只有 RC 版本)。最终版本是在两个月后发布的。 :-) - ferovoid FireTask()
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
//Your job
}
启动另一个运行循环的线程
在循环内部;休眠10分钟,然后调用您的方法,重复执行