1. 程式人生 > >執行緒更新UI (執行緒與委託)

執行緒更新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 對控制元件進行賦值即可

private void 函式1(string  引數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)
{

}