[英]How to run a function every 10 seconds?
我知道这个问题已经在 SO 上被问过很多次了,但是他们都没有能够解决我的问题。 我想使用线程每 10 秒调用一次函数。
我有一个进行帧处理的函数。 我希望能够在每 10 秒后抓取一帧然后对其进行处理。 我的研究表明,最好为此目的使用线程,并且由于我需要在特定时间段后执行它,因此我还需要一个计时器控制。
我无法弄清楚如何一起使用线程和计时器。 此外,我尝试使用BackgroundWorker
控件,该控件在处理时严重挂断了我的应用程序。 我还尝试使用计时器控件并尝试每 10 秒调用一次该函数,但在这种情况下,如果该过程超过 10 秒可能会导致一些问题。
任何可以向我展示如何使用线程每 10 秒调用一次函数的示例或源代码将不胜感激。
您不一定需要线程。 您可以使用等待/异步:
public async Task DoSomethingEveryTenSeconds()
{
while (true)
{
var delayTask = Task.Delay(10000);
DoSomething();
await delayTask; // wait until at least 10s elapsed since delayTask created
}
}
在这个例子中,返回的任务永远不会完成; 要解决您需要使用其他条件而不是true
。
在具有 GUI 的应用程序中,这将通过消息循环在 UI 线程上执行 DoSomething,就像任何其他事件(如按钮单击处理程序)一样。 如果没有 GUI,它将在线程池线程上运行。
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();
}
在 Windows 窗体应用程序中,从 Visual Studio 的工具箱中添加一个计时器,在设计器视图下双击它,然后将您希望每 X 秒执行一次的功能放在出现的函数中。 确保在属性视图中启用计时器; 在那里您还可以更改间隔(以毫秒为单位)。
如果您想运行代码 10 秒然后停止它,您可以使用此代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Timers;
namespace Tdo
{
class Program
{
public static bool k=true;
static void Main(string[] args)
{
Timer q = new Timer(10000);
q.Elapsed += Q_Elapsed;
q.Start();
while(k)
{
Console.WriteLine(DateTime.Now);
}
Console.ReadKey();
}
private static void Q_Elapsed(object sender, ElapsedEventArgs e)
{
StopTheCode(ref k);
}
public static void StopTheCode(ref bool flag)
{
flag= false;
}
}
}
这里只是将现在的日期时间写为 10 秒,当计时器过去时,它设置标志 = false 和 while 停止,但请注意这 10 秒将取决于您的设备 GHz 平均每秒执行指令的次数会有所不同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.