C# 运行阻止主窗口的全局Messagebox
我在WPF应用程序的构造函数中运行了一个等待的函数:C# 运行阻止主窗口的全局Messagebox,c#,wpf,C#,Wpf,我在WPF应用程序的构造函数中运行了一个等待的函数: Task.Run(async () => { var r = await checkValidLicenseAsync(hardwareid); if (r == false) MessageBox.Show("no License."); } messagebox没有阻止我的主窗口。我想这是因为我在执行任务?什么是变通方法?将此代码作为任务运行时,您期望得到什么?它在这方面没有任何
Task.Run(async () =>
{
var r = await checkValidLicenseAsync(hardwareid);
if (r == false)
MessageBox.Show("no License.");
}
messagebox没有阻止我的主窗口。我想这是因为我在执行任务?什么是变通方法?将此代码作为任务运行时,您期望得到什么?它在这方面没有任何优势。可能长时间运行的许可证验证已经通过
wait
调用,使其不受UI阻塞(除非其实现混乱)
要使消息框阻塞(即模式),只需编写
bool valid = await checkValidLicenseAsync(hardwareid); // non-blocking
if (!valid) {
MessageBox.Show("no License."); // blocking
}
假设这是System.Windows.MessageBox
,而不是它的winforms挂件
一种可能的方法是使用工厂方法返回对象。另一种方法是使用所述的AsyncLazy
另见:
-到。我认为您不能将等待的方法调用到构造函数中。因为构造函数不能添加异步描述符。您可以在构造函数中调用委托。只需将逻辑包装到异步委托中就可以在GUI线程上调用它。抛出异常,稍后处理并显示消息框。我如何在GUI线程上调用?不要使用task并使用ShowDialog来保持焦点。我无法在构造函数中运行异步函数“我如何在GUI线程上调用?”请用谷歌搜索,谢谢。我在构造函数中运行此代码。在构造函数中,我不能等待方法,构造函数应该始终保持对象完全初始化。另外,构造函数永远不会失败。好的,我想我必须将代码移动到主窗口的已加载事件