我知道这个问题在SO上被问过很多次,但是没有一个能够解决我的问题.我想使用线程每10秒调用一次函数.
我有一个执行帧处理的功能.我希望能够在每10秒钟后抓取一个帧然后处理它.我的研究表明,为此目的最好使用线程,并且,由于我需要在特定时间段后执行它,我还需要一个定时器控件.
我无法弄清楚如何将线程和计时器结合使用.此外,我尝试使用一个BackgroundWorker控件,在处理时,严重挂起我的应用程序.我也尝试过使用定时器控件并尝试每隔10秒调用一次该函数,但在这种情况下,如果进程超过10秒,可能会导致一些问题.
任何可以告诉我如何使用线程每10秒调用一次函数的示例或源代码将非常感激.
private Timer timer1;
public void InitTimer()
{
timer1 = new Timer();
timer1.Tick += new EventHandler(timer1_Tick);
timer1.Interval = 10000; // in miliseconds
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
yourfunctionhere();
}
Run Code Online (Sandbox Code Playgroud)
你不一定需要线程.您可以使用await/async:
public async Task DoSomethingEveryTenSeconds()
{
while (true)
{
DoSomething();
await Task.Delay(10000);
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,返回的任务永远不会完成; 修复你需要使用其他条件而不是true.
在具有GUI的应用程序中,这将通过消息循环在UI线程上执行DoSomething,就像任何其他事件(如按钮单击处理程序)一样.如果没有GUI,它将在线程池线程上运行.