該例項功能為「多執行緒控制ui控制項」,執行緒函式實現自動加1。介面如下:
//委託處理方法(關聯與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。介面如下 using system using system.collections.generic using system.componentmodel using system.data using system.drawing u...
linux多執行緒控制
include include include include include define size 1024 函式作用 使用訊號量控制,讀取輸入,獲得長度 void thread function void argv char buf size sem t sem int main res pt...