這個問題與this question about exception handling有一點關係。我在那裏找到的解決方法包括滾動我自己的消息循環。滾動你自己的消息循環,有什麼陷阱?
所以我的主要方法現在基本上是這樣的:
[STAThread]
static void Main() {
// this is needed so there'll actually an exception be thrown by
// Application.Run/Application.DoEvents, instead of the ThreadException
// event being raised.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form form = new MainForm();
form.Show();
// the loop is here to keep app running if non-fatal exception is caught.
do {
try {
Application.DoEvents();
Thread.Sleep(100);
}
catch (Exception ex) {
ExceptionHandler.ConsumeException(ex);
}
}
while (!form.IsDisposed);
}
什麼我不知道,雖然,這是一種安全/體面的方式來取代較爲典型 「Application.Run(新的MainForm( ));」,無論是用於異常處理還是用於其他任何事情,還是應該始終堅持使用Application.Run?
在另一個應用程序,在測試現在類似的方法同時用於裝載(閃屏)和異常處理,我不認爲它造成任何麻煩(尚未:-))
在.NET中似乎沒有WaitMessage等價物,並且僅爲消息循環使用P/Invoke似乎有點涉及。 (不是說它很難,但它不能以這種方式..) 另外我沒有另一個解決方案,我的其他問題(請參閱此問題中的鏈接),爲什麼它沒有意義? :p – Tobi 2008-09-14 20:18:45