.net - Windows 窗体 - 多个事件循环

标签 .net winforms

我有一个可以同时打开多个文档的 Windows 窗体 (.NET) 应用程序。

让每个文档(表单)运行自己的事件循环会很方便。通过简短的实验,在他们自己的 STA 线程中启动几个事件循环似乎可以工作。有什么理由说明这是一个坏主意吗?

最佳答案

我认为在不同的线程上创建多个消息循环是非常好的。唯一需要注意的是在处理 3rd 方 UI 工具包时,它们有时将句柄存储为静态(而不是 ThreadStatic)成员,如果您的应用程序中有多个 UI 线程,它会出现问题(在我的情况下,我发现菜单/工具栏键盘加速器无法正常工作)。

这样做的一个重要原因是,如果您有显示在不同无模式对话框上的模式对话框。如果您将所有内容放在同一个消息循环中,那么如果其中一个无模式对话框具有模态对话框,则整个应用程序(所有窗口)都将被阻止,直到您关闭模态对话框。

而且,就像凯文所说的那样,注意跨窗口(跨线程)调用。您可以使用 Control.BeginInvoke 或 Control.Invoke 在其他 UI 线程上发布委托(delegate)调用。

要考虑的另一件事是您将如何退出您的流程。您很可能需要跟踪消息循环,以便在您想要关闭所有内容时停止它们。如果您不关心并且只想在所有窗口关闭时结束该过程,您也可以这样做。

关于.net - Windows 窗体 - 多个事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/248449/

相关文章:

c# - Windows 窗体应用程序的 Web 界面

c# - 将 C# 代码注入(inject)另一个进程并调用目标函数

c# - 如何从网站下载 .EXE 文件?

c# - 禁用 WinForms 文本渲染上的抗锯齿功能

c# - Mono.Cecil 写入库目标框架 3.5 - 它写入对 mscorlib 4.0 的引用

c# - 在 C# 中为 DataGridViewButtonColumn 设置图像

c# - 将变量从子窗体传递到父窗体

c# - 如何检查某事是 .net 异常还是自定义异常

.net - 我们基于 .NET 的 IDE 使用什么脚本语言?

.net - 程序终止时出现 LoaderLock 错误