9

应用程序的主线程正在做一些工作。

还有一个计时器,它应该每 10 分钟调用一些应该异步运行的方法。

你能给我一个很好的例子吗?

4

4 回答 4

14

我不建议使用带有循环和睡眠的显式线程。这是不好的做法和丑陋的。为此目的有计时器类:

如果这不是 GUI 应用程序,那么您可以使用System.Threading.Timer在不同的线程上定期执行代码。

如果这是一个 WinForms/WPF 应用程序,请分别查看System.Windows.Forms.TimerSystem.Windows.Threading.DispatcherTimer。这些很方便,因为它们在 GUI 线程上执行代码,因此不需要显式Invoke调用。

这些链接还包含每个链接的示例。

于 2012-06-25T14:43:45.907 回答
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));
    }
}

(此代码未经测试)

于 2012-06-25T14:41:38.957 回答
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   
}
于 2012-06-25T14:43:09.047 回答
-3

启动另一个运行循环的线程

循环内部;睡10分钟然后调用你的方法,重复

于 2012-06-25T14:43:57.903 回答