
Possible to “spin off” several GUI threads? (Not halting the system at Application.Run)我的目标 我想要一个主处理线程(非GUI),并能够根据需要在其自己的后台线程中剥离GUI,并使我的主要非GUI线程保持正常工作。换句话说,我希望我的主要非GUI线程成为GUI线程的所有者,而不是相反。我不确定Windows Forms(?)甚至可能做到这一点 背景
我有一个基于组件的系统,在该系统中,控制器使用单个方法
通过xml配置文件并通过添加包含 整个系统的寿命如下所示
如果组件启动 如果允许这些组件启动它们自己的Windows Forms GUI,那将是很好的。 问题
当组件尝试启动 组件示例。其中一个与GUI无关,而第二个则触发了一个可爱的带有粉红色蓬松兔子的窗户。
我没有运气尝试过。即使当我尝试在其自己的线程中启动GUI时,执行也会暂停,直到该GUI关闭为止。
是否可以剥离GUI并在 Application.Run方法显示一个(或多个)表单并启动标准消息循环,该循环运行直到关闭所有表单为止。您不能通过关闭所有表单或强制关闭应用程序来强制返回该方法。 但是,您可以将ApplicationContext(新Form()的instad)传递给Application.Run方法,并且ApplicationContext可用于一次启动多个表单。仅当所有这些应用程序都关闭时,您的应用程序才会结束。参见此处:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.run.aspx 此外,您非模态显示的任何表单都将继续与主表单一起运行,这将使您拥有不止一个相互阻塞的多个窗口。我相信这实际上是您想要实现的目标。 我不确定这是否正确,但是我记得从控制台应用程序运行窗口表单,方法是仅更新表单并在其上调用newForm.Show(),如果您的组件使用的是它而不是Application.Run(),则新表格不应阻止。 当然,组件将负责维护对其创建的表单的引用 我敢肯定,如果您足够努力地攻克它,这是可能的,但是我建议这不是一个好主意。 " Windows"(您在屏幕上看到的)与进程高度相关。也就是说,每个显示任何GUI的进程都应具有一个消息循环,该消息循环将处理与创建和管理窗口有关的所有消息(诸如"单击按钮","关闭应用程序","重画屏幕"之类的消息) ' 等等。 因此,或多或少地假定如果您有任何消息循环,则该消息循环在整个过程的生命周期中必须可用。例如,Windows可能会向您发送"退出"消息,并且即使屏幕上没有任何内容,您也需要有一个消息循环来处理该消息。 最好的选择是这样做:
制作一个永远不会显示的假表格,这是您的"主应用程序" |