2011-10-27 25 views
2

是否可以在单独的线程上运行MDI窗体的每个子窗体?如果是这样,你可以给一些代码和例子如何设置?将每个子窗体作为MDI容器中的单独线程运行

谢谢!

+0

这没有意义 - '从单独的线程运行窗体',也许你想要在单独的线程中运行一个方法? – sll

+0

不要尝试这个。维护用户和用户界面线程之间的一对一映射。 –

回答

6

我不知道你是否知道你提出的解决方案的奇特性。如果这个答案完全错过了商标,我很抱歉。

我假设你想在你的应用程序中使用响应。你不希望其他表单在一个表单正在工作时“挂起”。

但是,每个窗体有不同的GUI线程是而不是人们通常如何实现这一点。我不知道这是否可能。

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

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

DNRTV episode with Stephen Toub

另一种可能性是,你是询问如何没有它modal显示形式。

+0

这是可能的,我之前做过,我只是在寻找我几年前使用的代码示例,还有一些非常巧妙的技巧。 – Behrooz

3

编号

任何GUI活动都必须在主线程上发生。

处理可以在一个单独的线程中完成,在这种情况下,请尝试在子窗体中使用BackgroundWorker

1

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

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