打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#跨线程操作控件

1.首先通过按键创建子线程:

创建子线程,子线程调用changeText方法。

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      }

2.子线程操作弹窗提示:

1      void changeText()2      {3          Thread.Sleep(3000);4          MessageBox.Show("进入子线程:"+Thread.CurrentThread.Name);5      }

效果图:

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

(1)错误的直接使用:

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

效果图:

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

1       CheckForIllegalCrossThreadCalls = false;

效果图:

(3)对跨线程进行检查

声明委托:

注:参数类型是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     }

效果图:

(4)使用MethodInvoker解决跨线程问题

  •   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         }

效果图:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
跨线程调用控件之MethodInvoker - C#天空 - 博客园
C#中跨线程操作控件
转:C#中跨线程访问控件问题解决方案
线程间操作无效: 从不是创建控件的线程访问它的三种方法
子线程访问住窗体控件
线程间操作无效: 从不是创建控件“...”的线程访问它。
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服