更新:這裏是MSDN文章How to: Make Thread-Safe Calls to Windows Forms Controls。它指出:'跨線程操作無效'不會終止WinForms應用程序(它應該)
.NET框架幫助您檢測 當您訪問在不是線程安全的方式,你的控制 。 當你運行你的應用程序 在調試器,以及比創建一個控制 試圖調用該控件的一個線程其他 ,該 調試器引發 出現InvalidOperationException與 消息,「控制控制名稱 從訪問一個線程,而不是它創建的 線程。「
此異常期間 調試可靠和發生,在某些情況下 ,在運行時。
我以前的經歷是在運行時拋出異常。
感謝斯彭斯爲我指出了正確的方向。
我在WinForms應用程序一個很常見的錯誤:後臺線程訪問UI控件,而不是直接使用Control.BeginInvoke()。
我的問題是:我看到InvalidOperationException「跨線程操作無效:控制'uxCheckStatus'從一個線程以外的線程訪問它創建。」在後臺線程的調試器中,但是它在WinForms內部的某個地方被吞噬了。
我希望它殺死後臺線程和整個應用程序。
此外,觸發它的代碼uxCheckStatus.Text = "success";
有時會在拋出異常期間/之後執行,即標籤文本讀取「成功」!我基本上失去了。任何人遇到這種行爲?
我使用1個按鈕在全新的WinForms解決方案上重現它,它們都使用ThreadPool和Thread for evil background線程。
如果我在後臺線程上拋出一個新的InvalidOperationException(),它會殺死應用程序。所以我唯一的猜測是WinForms在某處處理了這個特定的異常,但是我無法在網絡上找到這種行爲的參考。
我運行.NET 3.5,VS 2008
'MDA'是什麼?你有沒有提及'按設計'?讓我重複自己:我知道我應該使用'Control.BeginInvoke'。我認爲,當我忘記使用它時,應用程序應該'快速失敗',而不是吞下異常。 – 2009-09-28 21:32:57
好的,在您提到調試模式後,我在MSDN上找到了它的參考,謝謝。 – 2009-09-28 21:52:51
我知道它被埋在MSDN的某處。做好把信息放入問題中,很多人沒有意識到SO被設計成有用答案的存儲庫,像這樣的維護使得這個網站變得非常棒。祝你好運,你的調試,沒有像讀別人的代碼:) – Spence 2009-09-29 00:39:15