我在解決如何在單獨的UI線程中創建winform時遇到問題,我討論過here。如何在線程中打開窗體並強制其保持打開狀態
在試圖找出這個我寫了下面的簡單測試程序。我只是想讓它在一個名爲「UI線程」的單獨線程上打開一個表單,並且只要表單處於打開狀態,允許用戶與表單交互(旋轉就是作弊),就保持線程運行。我明白爲什麼下面的失敗和線程立即關閉,但我不知道我應該做些什麼來解決它。
using System;
using System.Windows.Forms;
using System.Threading;
namespace UIThreadMarshalling {
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var tt = new ThreadTest();
ThreadStart ts = new ThreadStart(tt.StartUiThread);
Thread t = new Thread(ts);
t.Name = "UI Thread";
t.Start();
Thread.Sleep(new TimeSpan(0, 0, 10));
}
}
public class ThreadTest {
Form _form;
public ThreadTest() {
}
public void StartUiThread() {
_form = new Form1();
_form.Show();
}
}
}
是的,這只是微軟未能正確地思考除了單個對話和單線程之外的任何事情。正如下面的解決方案所述,您可以啓動一個單獨的消息泵,但沒有方便的方式從GUI線程啓動它,因此無法將第二個窗體作爲非模態對話框執行。 – 2012-07-18 23:24:17
公平地說,問題出自4年前,關於一個12歲的技術:) – 2012-11-20 21:13:33
是的,我知道,但拋開這個事實,甚至12年前人們想要這個,甚至沒有看我會打賭一大筆錢MS的任何修訂/新API都沒有改變這種情況。 – 2012-11-22 04:22:26