线程更新UI(线程与委托)

xiaoxiao2021-02-28  143

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

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-69557.html

最新回复(0)