Не могу дождаться завершения задачи / изменения пользовательского интерфейса в WPF - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь указать состояние моего сервера с помощью эллипса. Когда мой сервер запускается, он должен иметь желтый цвет, а когда он подключен к сети / отключен, он должен быть зеленым / красным.

Проблема в том, что я не вижу желтый эллипс. Я помещаю в метод 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 из другого потока

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...