C 多執行緒控制控制項例項(例程簡單,注釋詳細)

2021-05-12 19:09:18 字數 1834 閱讀 4229

該例項功能為「多執行緒控制ui控制項」,執行緒函式實現自動加1。介面如下: 

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.text;

using system.windows.forms;

using system.threading;

namespace treadtest

//委託處理方法(關聯與listboxdelegate)

private void listbox()

else//如果是在另一線程操作listbox,則啟用委託

listbox1.invoke(new listboxdelegate(listshow));

}//定義對ui主線程式控制件的操作,「與addauto相關聯」。

private void listshow()

//定義執行緒函式

private void addauto()

}//在click事件中啟動多執行緒

private void btnstart_click(object sender, eventargs e)

}//全域性變數解決方案

public class commondata

set

}public static int num

set }}

}總結:

要使用多執行緒控制ui控制項,必須用委託實現。呼叫控制項的invoke方法(invoke方法的引數是乙個委託型別的引數)。

實現步驟:

1.宣告委託。

2.宣告委託處理函式(判斷是主線程控制ui控制項,還是invoke(多執行緒)控制ui控制項)。

3.宣告乙個執行緒例項,將執行緒函式的委託傳入threadstart()。

4.開啟該執行緒。

5.定義該執行緒函式,欲控制ui控制項,則呼叫第2步的委託處理函式,他將自己判斷選擇用invoke。

6.定義invoke需要呼叫的函式(如本例的listshow函式)

在上例中,只是完成了多執行緒控制主線程式控制件的功能,如果能手動和自動同時訪問全域性變數時,就有可能出現執行緒不同步的問題。以下主要利用loc**程鎖來修改解決方案,使執行緒同步,注意**帶動的地方。

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.text;

using system.windows.forms;

using system.threading;

namespace treadtest

//委託處理方法(關聯與listboxdelegate)

private void listbox()

else//如果是在另一線程操作listbox,則啟用委託

listbox1.invoke(new listboxdelegate(listshow));

}//定義對ui主線程式控制件的操作,「與addauto相關聯」。

private void listshow()

//定義執行緒函式

private void addauto()

}//在click事件中啟動多執行緒

private void btnstart_click(object sender, eventargs e)

C 多執行緒控制控制項例項(例程簡單,注釋詳細)

該例項功能為 多執行緒控制ui控制項 執行緒函式實現自動加1。介面如下 using system using system.collections.generic using system.componentmodel using system.data using system.drawing u...

C 多執行緒控制控制項例項

該例項功能為 多執行緒控制ui控制項 執行緒函式實現自動加1。介面如下 委託處理方法 關聯與listboxdelegate private void listbox else 如果是在另一線程操作listbox,則啟用委託 listbox1.invoke new listboxdelegate li...

C 多執行緒程式設計簡單例項

using system using system.collections using system.collections.generic using system.threading 在開發中經常會遇到執行緒的例子,如果某個後台操作比較費時間,我們就可以啟動乙個執行緒去執行那個費時的操作,同時程...