如何每10秒运行一次功能?

G d*_*oid 0 c# multithreading

我知道这个问题在SO上被问过很多次,但是没有一个能够解决我的问题.我想使用线程每10秒调用一次函数.

我有一个执行帧处理的功能.我希望能够在每10秒钟后抓取一个帧然后处理它.我的研究表明,为此目的最好使用线程,并且,由于我需要在特定时间段后执行它,我还需要一个定时器控件.

我无法弄清楚如何将线程和计时器结合使用.此外,我尝试使用一个BackgroundWorker控件,在处理时,严重挂起我的应用程序.我也尝试过使用定时器控件并尝试每隔10秒调用一次该函数,但在这种情况下,如果进程超过10秒,可能会导致一些问题.

任何可以告诉我如何使用线程每10秒调用一次函数的示例或源代码将非常感激.

Gur*_*Rao 7

使用System.Windows.Forms.Timer

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)


Wim*_*nen 5

你不一定需要线程.您可以使用await/async:

public async Task DoSomethingEveryTenSeconds()
{
   while (true)
   {
      DoSomething();
      await Task.Delay(10000);
   }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,返回的任务永远不会完成; 修复你需要使用其他条件而不是true.

在具有GUI的应用程序中,这将通过消息循环在UI线程上执行DoSomething,就像任何其他事件(如按钮单击处理程序)一样.如果没有GUI,它将在线程池线程上运行.

  • 这将在“做某事”之间*等待* 10 秒,而不是“每 10 秒执行一次”。特别是如果 DoSomething 需要几秒钟,这可能不是 OP 想要的。或者这可能已经足够好了,很难说。 (3认同)
  • 要根据要求进行此工作,您应该在调用“DoSomething”之前创建“Task.Delay”任务,然后“等待”该任务。 (3认同)