C#跨线程操作控件 子线程修改主线程控件


3.子线程修改主线程控件

(1)错误的直接使用:

1 void changeText() 2  { 3 Thread.Sleep(3000); 4 textBox1.Text = "进入子线程!"; 5 }

效果图:

 

 

(2)关闭跨线程的检查:

1 CheckForIllegalCrossThreadCalls = false;

效果图:

 

注:参数类型是object型

1 public delegate void changeTextHandler(object str);

按键点击调用方法修改控件:

注:参数不是在线程创建的时候写入,是在start函数写入!

复制代码
1 private void btnOK_Click(object sender, EventArgs e) 2  { 3 Thread th = new Thread(changeText); 4 th.Name = "new Thread!"; 5 th.IsBackground = true; 6 th.Start("进入子线程!"); 7 }
复制代码

修改控件的方法(带一个参数):

复制代码
 1 void changeText(object str)  2  {  3 if (textBox1.InvokeRequired == true)  4  {  5 changeTextHandler ct = new changeTextHandler(changeText);  6 textBox1.Invoke(ct, new object[] { str });  7  }  8 else  9  { 10 textBox1.Text = str.ToString(); 11  } 12 }
复制代码

效果图:

 

  MethodInvoker是无参无返回值;

  •   Action是多参无返回;
  •   Func是多参又返回。
复制代码
1 private void btnOK_Click(object sender, EventArgs e) 2  { 3 Thread th = new Thread(changeText); 4 th.Name = "new Thread!"; 5 th.IsBackground = true; 6  th.Start(); 7 }
复制代码

调用对事件的处理方法:

1 void changeText() 2  { 3 Thread.Sleep(3000); 4 MethodInvoker ln = new MethodInvoker(change); 5 this.BeginInvoke(ln); 6 }

调用对控件的修改方法:

1 void change() 2  { 3 textBox1.Text = "进入子线程!"; 4 }

效果图:

 

菜鸟一枚,但有一颗不断进取的心; 兴趣所至,相信自己终会成功!!!!! 加油,imstrive


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM