c# - 从线程启动时模态弹出窗口失败 - CSharp WPF

标签 c# wpf windows messagebox

为了批量上传许多文件,我有一段 CSharp WPF 代码,它会生成线程以允许并行上传文件。 如果上传发生错误,将使用 MessageBox 弹出一条消息。这工作得很好。

但最近我们决定自定义 MessageBox 的外观。我发现当使用 ShowDialog() 打开新的自定义 WPF MessageBox 窗口时,会抛出一个错误,指出无法启动 GUI。仅当生成的线程中的代码尝试打开自定义消息窗口时才会发生这种情况 - 当从主线程打开自定义消息框时,我没有看到问题。

我的临时修复是捕获启动自定义对话框时发生的任何错误,或者调用标准 MessageBox.Show() 来显示消息。这有效。

我不确定为什么可以使用标准 MessageBox.Show() 但它不适用于自定义窗口。有办法解决这个问题吗?

最佳答案

通常(在任何 GUI-API 中)不要从工作线程调用 GUI 函数,也不在 GUI 线程上做繁重的工作。 标准 MessageBox 在工作线程上工作这一事实令人遗憾。

是的,你完全正确。当您的工作线程上发生需要向用户显示的事情时,将通知(信号、事件,无论您的框架如何调用它)发送到 GUI 线程并在那里显示消息。

关于c# - 从线程启动时模态弹出窗口失败 - CSharp WPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6102682/

相关文章:

时间:2019-03-17 标签:c#EPPAutoRowHeight

windows - 在 Jenkins 中运行 bat 文件

windows - Windows 和 Git 的非法文件名问题

c# - 您如何知道 ItemsControl 的哪个元素在 MVVM 中发送事件?

c# - "Beta: Use Unicode UTF-8 for worldwide language support"究竟做了什么?

c# - 如何以编程方式将单击事件添加到 FrameworkElementFactory

C#从HTML文档中提取内容

c# - 从 Web App 调用时,System.Reflection.Assembly.GetEntryAssembly() 为空

c# - 如何强制 WPF 启动窗口到特定屏幕?

c# - 更改项目时的 WPF 列表框选择问题