如何在WPF中等待响应

时间:2018-06-20 13:56:32

标签: c# wpf timer

因此,我正在与外部进行交谈,并且我刚刚向它发送了一条消息,我希望几乎立即得到答复,但是如果有延迟,我将等待一秒钟。一个单独的线程正在监视输入,并且在接收到该数据时将设置标志“ newdataflag”。我在下面要做的就是在while循环中等待,直到设置了此标志或1秒钟为止。

 private bool WaitrxData()
    {
        System.Windows.Threading.DispatcherTimer waitrxtimer = new System.Windows.Threading.DispatcherTimer();
        waitrxtimer.Tick += waitrxtimer_Tick;
        waitrxtimer.Interval = TimeSpan.FromMilliseconds(10);
        waitrxtimer.IsEnabled = true;
        waitrxtimer.Start();
        statusText.Text = "Waiting For Response";
        //wait for new data
        while (!newdataflag)
        { 
            if (waitrxcounter > 100)
            {
                statusText.Text = "No Response";
                break;
            }
        }
        waitrxtimer.Stop();
        if (waitrxcounter > 100)
        {
            return false;
        }
        else
        {
            newdataflag = false;
            return true;
        }

    }

    private void waitrxtimer_Tick(object sender, EventArgs e)
    {
        waitrxcounter++;
    }

如果响应如此迅速,则跳过while循环,但此代码有效,但如果不这样,则该代码将不会执行计时器,而只会陷入while循环并崩溃。我认为这是因为计时器没有像我想的那样创建一个新的线程来进行滴答?

也许我做错了什么?

欢呼

1 个答案:

答案 0 :(得分:0)

您可以{@ 1}使用CancellationToken来代替忙于循环:

await Task.Delay()