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