我正在制作一个程序,每n秒重复一次动作(例如单击)。
我的问题是,在Task.Delay()运行时,我根本无法与该程序进行交互(主要问题是无法将其关闭)。
这是我用作计时器的功能:
private void timer(int time)
{
var t = Task.Run(async delegate
{
await Task.Delay(time);
});
t.Wait();
}
例如,我的使用方式是:
int x = 10;
while(x-- > 0)
{
MessageBox.Show("Test"); // display a messagebox
timer(1000); // 1 second delay
}
是否有更好的方法来延迟操作,或者我可以使它以这种方式工作?
答案 0 :(得分:1)
由于您正在调用Wait
,因此它将阻塞UI线程,直到任务完成。您需要从代码中删除Wait
。
您可以改为从timer
返回任务,并在await
循环中while
返回任务。这样,代码将异步运行而不会阻塞,但是它要求您向包含while
循环的方法中添加异步。
.NET框架中已经内置了计时器,您可以使用其中一个计时器,而不必重新发明轮子。