多線程中使用CheckForIllegalCrossThreadCalls = false訪問窗口

在多線程程序中,新建立的線程不能訪問UI線程建立的窗口控件,若是須要訪問窗口中的控件,能夠在窗口構造函數中將CheckForIllegalCrossThreadCalls設置爲 falsewindows

public Form1()
{
    InitializeComponent();
    CheckForIllegalCrossThreadCalls = false;
}
安全

 

也能夠針對某一控件進行設置,例如:多線程

    TextBox.CheckForIllegalCrossThreadCalls = false;函數

 

MSDN說明:性能

如何:對 Windows 窗體控件進行線程安全調用spa

 

使用多線程提升 Windows 窗體應用程序的性能時,必須注意以線程安全方式調用控件。線程

示例調試

訪問 Windows 窗體控件本質上不是線程安全的。若是有兩個或多個線程操做某一控件的狀態,則可能會迫使該控件進入一種不一致的狀態。還可能出現其餘與線程相關的 bug,包括爭用狀況和死鎖。確保以線程安全方式訪問控件很是重要。orm

.NET Framework 有助於在以非線程安全方式訪問控件時檢測到這一問題。在調試器中運行應用程序時,若是建立某控件的線程以外的其餘線程試圖調用該控件,則調試器會引起一個 InvalidOperationException,並提示消息:「從不是建立控件 control name 的線程訪問它。」get

此異常在調試期間和運行時的某些狀況下可靠地發生。強烈建議您在顯示此錯誤信息時修復此問題。在調試以 .NET Framework 2.0 版以前的 .NET Framework 編寫的應用程序時,可能會出現此異常。

能夠經過將 CheckForIllegalCrossThreadCalls 屬性的值設置爲 false 來禁用此異常。這會使控件以與在Visual Studio 2003 下相同的方式運行。

相關文章
相關標籤/搜索