Async / Await в Windows Forms - PullRequest
       1

Async / Await в Windows Forms

0 голосов
/ 08 июня 2018

У меня есть основная форма с элементом управления ListView, который содержит список удаленных компьютеров в моем домене (Active Directory).При щелчке правой кнопкой мыши по любому элементу открывается вторая форма с информацией об объектах WMI Objects.Извлечение этих данных занимает некоторое время, поэтому я хотел открыть третью форму, просто показывая сообщение «пожалуйста, подождите».Это код в моей основной форме:

private async void cmShowDetails_Click(object sender, EventArgs e)
{
    nomeComputer = lvElencoMacchine.SelectedItems[0].Text;

    HamsterWheel hw = new HamsterWheel(); // create an instance of the waiting form

    await Task.Run(()=> {
        WorkstationDetails wdForm = new WorkstationDetails(nomeComputer, FUNZIONEFORM.VISUALIZZAZIONE);
        hw.Close();
        if (!wdForm.IsDisposed) wdForm.ShowDialog();
        });

    hw.ShowDialog();
}

Я вижу, что после вызова метода построения формы, в которой мне нужно показать детали машины, фокус остается на этом потоке.Чего мне не хватает? 100

Спасибо.Давида.

1 Ответ

0 голосов
/ 08 июня 2018

Вы можете использовать SynchronizationContext.Current для запуска асинхронного кода, который приведет к обновлению пользовательского интерфейса.

    SyncronizationContext.Current.Post(d => {
        'YOUR CODE HERE'
    }, null);

Это позволяет запускать асинхронный код в потоке пользовательского интерфейса, который может быть там, где возникла проблема с несколькими потоками.исходя из.

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