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         }

效果图:

(0)

相关推荐

  • C# this.Invoke()的作用与用法

    Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时,调用this.Invoke(); 在多线程编程中,我们经常要在工作线程中去 ...

  • TextBox控件保存上次的输入

    本片文章是参考C# 怎么让winform程序中的输入文本框保留上次的输入再此表示感谢 重新在这里写一遍,是为了保存一下,方便自己下次使用可以很快的找到 1.设置txtBox控件的配置文件 2. 选择T ...

  • C#跨窗体传递值

    在我们实际的项目工程中,窗体之间往往需要数据的传递,本次通过学习网友发的帖子,了解了值传递的方法,现写下来. 窗体之间值的传递方式有很多种,本文只讲三种:控件属性访问.普通委托事件访问.泛型委托Act ...

  • C# 比较简单的winform跨线程操作界面控件的方法

    winform跨线程操作界面控件,一般用delegate比较多,不过写法都好麻烦.网上找到一个比较快捷的写法: tbxTemp1.Invoke((MethodInvoker)delegate { tb ...

  • WPF控件操作之改变父控件之TabControl示例

    昨天做个简单的演示,想偷懒,但同时又想用WPF再做一个,稍微提高一下演示的美观,助力拿下订单.所以,在做完WinForm后,又做了一个wpf版本的,但控件在不同容器之间的移动,winform和wpf差 ...

  • Excel VBA 7.46字典+数字+窗体控件,跨工作表实现COUNTIF的功能

    一起学习,一起进步~~ 之前我们分享过一篇文章,就是通过字典+数组的方式来实现跨工作表求和的,在那一节的学习中,我们实现了count函数的跨工作表的一个求和的效果,后面有小伙伴表示,他碰到的场景不仅仅 ...

  • 梦想cad控件在网页开发时如何获取图层操作的信息

    简介 在此示例将演示如何获取CAD控件图纸上一些常用信息,如符号表(块表.层表.文字样式表.线型表.点样式表).字典.点击此处在线演示. 下面将介绍如何获取符号表的一些信息,如下图所示: 图层操作 D ...

  • 老虎控台Titan操作按键功能及控件英文翻译

    老虎控台Titan操作按键功能及控件英文翻译 老虎控台Titan操作按键说明及控件英文翻译,希望能给各位新手灯光师朋友们提供一份便捷的学习方式,让更多的灯光师朋友熟悉,了解 Tiger  Touch, ...

  • VBListView控件各种操作详解

    Private Sub Form_Load()       'ListView1.SmallIcons = ImageList1.Object '把ImageList1图标列表控件绑定到 ListVi ...

  • SAP Fiori Elements 框架里 Smart Table 控件的工作原理介绍

    这是 Jerry 2021 年的第 34 篇文章,也是汪子熙公众号总共第 310 篇原创文章. Jerry 前一篇文章 深入掌握 SAP Fiori Elements 工作原理系列之二:如何给 Fio ...

  • Android应用程序----UI界面控件(菜单menu)

    菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口 Android系统支持三种菜单 选项菜单(Option ...

  • Android应用程序----UI界面控件(相对布局,绝对布局)

    相对布局 相对布局(RelativeLayout)是一种非常灵活的布局方式,能够通过指定界面元素与其他元素的相对位置关系,确定界面中所有元素的布局位置 特点:能够最大程度保证在各种屏幕类型的手机上正确 ...