Task.Delay运行时无法关闭程序

时间:2018-09-01 16:33:08

标签: c#

我正在制作一个程序,每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
}

是否有更好的方法来延迟操作,或者我可以使它以这种方式工作?

1 个答案:

答案 0 :(得分:1)

由于您正在调用Wait,因此它将阻塞UI线程,直到任务完成。您需要从代码中删除Wait

您可以改为从timer返回任务,并在await循环中while返回任务。这样,代码将异步运行而不会阻塞,但是它要求您向包含while循环的方法中添加异步。

.NET框架中已经内置了计时器,您可以使用其中一个计时器,而不必重新发明轮子。