首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows窗体-多个事件循环

Windows窗体-多个事件循环
EN

Stack Overflow用户
提问于 2008-10-29 21:17:06
回答 5查看 2K关注 0票数 7

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-30 14:56:58

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

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

而且,就像Kevin所说的,要当心跨窗口(跨线程)调用。您可以使用Control.BeginInvoke或Control.Invoke在其他UI线程上发布委托调用。

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

票数 4
EN

Stack Overflow用户

发布于 2008-10-29 21:36:56

使用MDI (多文档界面)容器和子窗体可能更明智。在这种情况下,每个文档都有自己的形式,从技术上讲,这意味着每个文档都有自己的消息队列。

票数 1
EN

Stack Overflow用户

发布于 2008-10-29 21:20:20

从线程访问GUI元素时要小心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/248449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档