将每个子表单作为MDI容器中的单独线程运行

时间:2011-10-27 12:26:27

标签: c# winforms multithreading mdi

是否可以在单独的线程上运行MDI表单的每个子表单?如果是这样,您能否提供一些代码和示例如何设置?

谢谢!

3 个答案:

答案 0 :(得分:6)

我无法从这个问题中看出你是否意识到你提出的解决方案的异国情调。如果这个答案完全错过了标记,我道歉。

我假设您在应用程序中需要响应性。当一个表单正在工作时,你不希望其他表单“挂起”。

但是,每个表单具有不同的GUI线程通常如何实现这一点。我不知道是否有可能。

您仍然只有一个线程处理所有图形(也称为“GUI线程”),但所有耗时的工作应立即卸载到另一个线程(也称为工作线程)。这样,应用程序仍能保持响应。

我建议你查看这个视频。是否适用,在4-6分钟内,您应该知道这是您正在寻找的答案。

DNRTV episode with Stephen Toub

另一种可能性是您询问如何在不modal的情况下显示表单。

答案 1 :(得分:3)

没有

任何GUI活动都必须在主线程上进行。

处理可以在单独的帖子中完成,在这种情况下,请尝试使用子表单中的BackgroundWorker

答案 2 :(得分:1)

这个MSDN forum post表示表单可以在不同的线程中运行。不过,我不知道它是否适用于儿童MDI表格。但这项技术很简单:

Thread thread = new Thread( () =>
   {
         var yourForm = new YourForm();
         Application.Run(yourForm);
   });
thread.ApartmentState = ApartmentState.STA;
thread.Start();