線程更新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)
{

}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章