繁体   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