繁体   English   中英

C#异步调用方法定期

[英]C# async call method periodically

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

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

你能给我一个很好的例子来组织这个吗?

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

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

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

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

最简单的方法是调用一个大功能,在这些动作之间休眠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));
    }
}

(此代码尚未经过测试)

使用BackgroundWorker线程。

void FireTask()
{
    BackgroundWorker bw = new BackgroundWorker();
    bw.DoWork += new DoWorkEventHandler(bw_DoWork);
    bw.RunWorkerAsync();
}

void bw_DoWork(object sender, DoWorkEventArgs e)
{
    //Your job   
}

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

在循环内; 睡10分钟然后打电话给你的方法,重复一遍

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM