• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#跨线程操作控件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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         }

效果图:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
为C#WindowForm程序设置热键。发布时间:2022-07-13
下一篇:
C#向服务器上传文件(客服端winform、服务端web)发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap