应用程序的主要线程正在做一些工作。
还有一个计时器,应该每隔10分钟调用一些应该异步运行的方法。
请您举一个如何组织这个的好例子?
答案 0 :(得分:12)
我不建议使用带循环和休眠的显式线程。这是不好的做法和丑陋。为此目的有计时器类:
如果这不是GUI应用程序,那么您可以使用System.Threading.Timer定期在不同的线程上执行代码。
如果这是一个WinForms / WPF应用程序,请分别查看System.Windows.Forms.Timer和System.Windows.Threading.DispatcherTimer。这些很方便,因为它们在GUI线程上执行代码,因此不需要显式的Invoke
调用。
链接还包含每个链接的示例。
答案 1 :(得分:2)
最简单的方法是调用一个大功能,在这些动作之间休眠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));
}
}
(此代码尚未经过测试)
答案 2 :(得分:0)
使用BackgroundWorker线程。
void FireTask()
{
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerAsync();
}
void bw_DoWork(object sender, DoWorkEventArgs e)
{
//Your job
}
答案 3 :(得分:-2)
启动另一个运行循环的线程
循环内部;睡10分钟然后打电话给你的方法,重复