執行緒更新UI (執行緒與委託)
執行緒更新UI
1.委託主執行緒:
this.Invoke((EventHandler)(delegate
{
UI更新
}));
if (this.richTextBox_message.InvokeRequired)
{
this.Invoke((EventHandler)(delegate
{
控制元件操作;
}));
}
else
{
控制元件操作;
}
2.自定義委託
1)在名稱空間下定義委託
namespace xxxxx{
delegate void委託1(string 引數1);//建立委託,設定輸入引數為string (可根據控制元件需求來修改引數型別)
2)建立對控制元件操作的函式 , 呼叫 函式1 對控制元件進行賦值即可
{
if (this.控制元件1.InvokeRequired)
{
委託1 d =new委託1(函式1);
this.Invoke(d,new object[] { 引數1 });//喚醒
}
else
{
控制元件1.Text= 引數1
}
}
一般不確定執行緒呼叫可以直接這樣寫 例:
void aaaa(TextBox Tbox,int num)
{
if (Tbox.InvokeRequired)
{
this.Invoke((EventHandler)(delegate
{
//Tbox控制元件要做的事
}));
}
else
{
//Tbox控制元件要做的事
}
}
建立執行緒
Thread aaa; //建立執行緒aaa
aaa = new Thread(函式1); //要執行在新執行緒的函式
aaa.Start(); //開始執行緒
//aaa.Abort(); //結束執行緒
匿名執行緒
ThreadStart threadStart = new ThreadStart(delegate()
{
執行緒內運算邏輯;
});
Thread thread = new Thread(threadStart);
thread.Start();//多執行緒啟動匿名方法
帶1個引數的執行緒:ParameterizedThreadStart
Thread t1 = new Thread(new ParameterizedThreadStart(函式1)); t1.IsBackground = true; t1.Start(引數1);
注意!!! 函式1的引數必須為object
函式1(object ddd)
{
}