c# - Windows 窗体中的异步/等待
问题描述
我有一个带有 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 线程上运行异步代码,这可能是您的跨线程问题的来源。
推荐阅读
- angular - 在 Angular 2 中附加值时,FormData 显示为空
- c++ - 非常小的方阵的特征线性求解器
- ios - React-native,如何获取文件资产图像的绝对路径?
- python - Django、Haystack、Elasticsearch:拒绝映射更新?
- r - R为迷你图添加列,每个行向量的值
- xpages - 重新打开应用程序后正在重置主模板名称
- session - 在 ASP.NET Core 中无需身份验证即可识别用户/PC
- node.js - 读取 Node.js 中的所有 shell 环境变量
- jquery - jquery 从多维 JSON 数组中读取数据
- sql-server - CTE 循环直到出现下一个 TextData 字段