當前位置:編程學習大全網 - 編程軟體 - c#網絡編程點對點網絡聊天中出現:線程間操作無效:從不是創建控件“richTextBox1”的線程訪問它。為什麽

c#網絡編程點對點網絡聊天中出現:線程間操作無效:從不是創建控件“richTextBox1”的線程訪問它。為什麽

默認情況下,C#不允許在壹個線程中直接操作另壹個線程中的控件,這是因為訪問Windows窗體控件本質上不是線程安全的。如果有兩個或多個線程操作某壹控件的狀態,則可能會迫使該控件進入壹種不壹致的狀態。還可能出現其他與線程相關的bug,以及不同線程爭用控件引起的死鎖問題。因此確保以線程安全方式訪問控件非常重要。

在調試器中運行應用程序時,如果創建某控件的線程之外的其他線程試圖調用該控件,則調試器會引發壹個InvalidOperationException異常,並提示消息:“從不是創建控件的線程訪問它”。

但是在Windows應用程序中,為了在窗體上顯示線程中處理的信息,我們可能需要經常在壹個線程中引用另壹個線程中的窗體控件。比較常用的辦法之壹是使用委托(delegate)來完成這個工作。

為了區別是否是創建控件的線程訪問該控件對象,Windows應用程序中的每壹個控件對象都有壹個InvokeRequired屬性,用於檢查是否需要通過調用Invoke方法完成其他線程對該控件的操作,如果該屬性為true,說明是其他線程操作該控件,這時可以創建壹個委托實例,然後調用控件對象的Invoke方法,並傳入需要的參數完成相應操作,否則可以直接對該控件對象進行操作

  • 上一篇:數字媒體藝術需要用圖形平板來畫嗎?
  • 下一篇:蘋果耳機3重力感應設置
  • copyright 2024編程學習大全網