1. 程式人生 > >C# 關於跨線程訪問控件問題

C# 關於跨線程訪問控件問題

直接 主窗體 https invoke 都是 add 機制 文章 如果

跨線程訪問控件問題的原因是:控件都是在主線程中創建的,而系統默認控件的修改權歸其創建線程所有。在子線程中如果需要直接修改控件的內容,需要使用委托機制將控件的修改操作交給主線程處理。因此,當沒有使用委托機制而是直接在子線程中修改控件內容時,會引發控件安全問題,即跨線程訪問控件問題。

所謂跨線程調用控件就是一個線程調用另外一個線程的控件。

常見使用情況,比如:當我們開了一個在後臺監聽消息的線程以後,需要將消息內容添加到主窗體的消息框內顯示出來。

這時候,我們就需要使用跨線程調用控件的方法。

1.首先,聲明一個委托,如:
//修飾符 delegate 返回類型 委托函數名(有參/無參);
public delegate void AddInfo_Delgegate(string message);
2.創建委托函數對象,如:

//添加消息到指定控件的函數
private void AddInfo(string message)
{
this.richTextBox_Message.Text += message;
this.richTextBox_Message.Text += "\r\n";//換行
}

AddInfo_Delegate addinfo = new AddInfo_Delegate(AddInfo);

3.在需要跨線程調用空間的地方,使用invoke方法:


this.richTextBox_Message.Invoke(addinfoDelegate, DELEGATEMESSAGE);
//this.richTextBox_Message 是需要添加消息的控件
//invoke() 正如官方解釋所說,在擁有此控件的線程上,調用指定參數列表執行委托。
//invoke() 有兩種參數模式,一是invoke(委托函數對象),二是帶參類型invoke(委托函數對象,參數)
---------------------
作者:linyujie0927
來源:CSDN
原文:https://blog.csdn.net/linyujie0927/article/details/72083227
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

C# 關於跨線程訪問控件問題