子執行緒與UI執行緒的通訊 委託

2021-09-05 19:55:19 字數 1175 閱讀 3497

由於專案中存在這樣的載入的畫面:在介面上有顯示載入資訊的

label

控制項和進度條,如果採用單執行緒則在載入資料的時候

ui介面會被鎖死,造成假死的感覺。為了給乙個更友好的介面,因此有必要引入多執行緒技術,使得軟體更加「人性化」。

但隨後在子執行緒中訪問介面上的控制項的時候會出現異常,不能操作主線程所控制的

ui介面。看來這得用到委託技術了!

首先我們定義委託:

public delegate void loadin(string data, int progress); 

定義委託用

delegate

關鍵字,隨後跟著乙個返回值(這裡

void

就是沒有返回值了),

loadin

是委託名,後面帶著兩個引數,分別代表顯示載入的資料和載入進度條的數值!

在窗體的

load

事件裡面我們定義乙個子執行緒,用於在後台載入資料並顯示載入情況。

定義執行緒:

threadstart

ts = new

threadstart(downin);  //

括號裡面的引數是乙個方法名,表示執行緒要處理的方法

thread mythread = new

thread(ts);    

mythread.start();   //

執行緒開始運作

以上三行是執行緒操作的核心內容,不熟悉執行緒定義和執行原理等的園友請參考《

c#執行緒參考手冊》!

然後我們在

downin

方法裡面例項化委託並呼叫之。(這裡「例項化」似乎用得不妥,但其實委託和類有很多地方是相似的)

private void downin()

委託其實就是充當方法的簽名,這裡委託的引數就是乙個方法名,這個方法名帶有兩個引數,和委託參數列是一樣的,同時返回型別也是一樣!

private

void update(string data,int progress)     //

在info

標籤上顯示載入資訊

就這樣我們繞了一圈,「間接」得通過委託訪問主線程構建的控制項。

本文只是拋磚引玉,可以了解一下執行緒和委託的好處。當然,執行緒並不是越多越好,否則只會增加系統開銷,應該看實際需要來應用。

注:如有疏漏之處請指教,謝謝。

C 委託與執行緒通訊

1 c 中的委託機制我簡單理解為c 中的函式指標。用法如下 使用委託 public delegate string messagedelegate string message public class m class program 委託的定義很明顯,他的返回型別和引數需要和被委託的方法一致,呼叫...

Qt中UI執行緒與子執行緒的互動

gui框架一般只允許ui執行緒操作介面元件,qt也是如此。但我們的應用程式一般是多執行緒的,勢必就涉及到ui執行緒與子執行緒的互動。下面介紹常用的ui執行緒與子執行緒互動方式,並附上自己的demo。qt中提供了一些執行緒安全的方法來讓我們使用 a.使用訊號槽 qt的訊號槽是執行緒安全的。connec...

C 窗體 UI執行緒委託

很多時候寫windows程式都需要結合多執行緒,在c 中用如下得 來建立並啟動乙個新的執行緒。thread thread new thread new threadstart threadproc 例項化乙個執行緒 thread.isbackground true 將執行緒改為後台執行緒 threa...