为了批量上传许多文件,我有一段 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/