簡體   English   中英

Windows窗體中的異步/等待

[英]Async / Await in Windows Forms

我有一個帶有ListView控件的主窗體,該控件包含我的域(Active Directory)中的遠程計算機列表。 通過右鍵單擊任何項​​目,將打開第二個窗體,其中包含WMI對象對該計算機的詳細信息。 檢索這些數據需要花費一些時間,因此我想打開第三種形式,只是顯示“請稍候”這種信息。 這是我主要形式中的代碼:

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();
}

我看到,一旦調用了我必須顯示機器詳細信息的表單的構造方法,焦點就集中在該線程上。 我想念什么?

謝謝。 戴維

您可以使用SynchronizationContext.Current運行異步代碼,這些代碼最終將更新UI。

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

這使您可以在UI線程上運行異步代碼,這可能是您的跨線程問題所在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM