无法等待WPF中的任务完成/ UI更改

时间:2018-10-29 13:37:03

标签: c# wpf asynchronous

我试图用椭圆形表示我的服务器状态。我的服务器启动时,它应该是黄色,在线/离线时它应该是绿色/红色。

问题是我看不到黄色椭圆。我在server.start()方法中放入了Thread.Sleep(3000)语句进行调试,但是当我触发“ ellipse_serverStatus_MouseLeftButtonUp”事件时,在这3秒后,我只能看到椭圆的颜色从红色变为绿色。

private void ellipse_serverStatus_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    this.Dispatcher.Invoke((Action)(() =>
    {
        ellipse_serverStatus.Fill = Brushes.Yellow;
    }));

    if (server.IsRunning)
    {
        server.Stop();
        ellipse_serverStatus.Fill = Brushes.Red;
    }
    else
    {
        server.Start();
        ellipse_serverStatus.Fill = Brushes.Green;
    }

}

我还尝试使方法异步并使用此方法:

await Task.Run(() => ellipse_serverStatus.Fill = Brushes.Yellow);

代替:

this.Dispatcher.Invoke((Action)(() =>
{
     ellipse_serverStatus.Fill = Brushes.Yellow;
}));

但是当我使用Task.Run()时程序崩溃,并告诉我不能从其他线程使用WPF控件

0 个答案:

没有答案