該例項功能為「多執行緒控制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 在開發中經常會遇到執行緒的例子,如果某個後台操作比較費時間,我們就可以啟動乙個執行緒去執行那個費時的操作,同時程...