c#使用MethodInvoker解决跨线程访问控件

.net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线程访问作检查,Control.CheckForIllegalCrossThreadCalls = false;可以实现访问,但是出不出错不敢保证C#跨线程访问控件运行时错误。

使用MethodInvoker即可解决:

原代码:

private void btnOK_Click(object sender, EventArgs e)
         {
             tslInfo.Text = "请稍候...";
             Thread td = new Thread(new ThreadStart(run));
             td.Start();
         }

/// <summary>
         /// 线程方法
         /// </summary>
         private void run()
         {
             this.tslInfo.Text = "就绪";
         }

修改后:
         private void btnOK_Click(object sender, EventArgs e)
         {
             tslInfo.Text = "请稍候...";
             Thread td = new Thread(new ThreadStart(threadRun));
             td.Start();
         }

/// <summary>
         /// 原线程方法
         /// </summary>
         private void run()
         {
             this.tslInfo.Text = "就绪";
         }

/// <summary>
         /// 线程方法
         /// </summary>
         private void threadRun()
         {
             MethodInvoker In = new MethodInvoker(run);
             this.BeginInvoke(In);
         }

c#使用MethodInvoker解决跨线程访问控件相关推荐

  1. c# winform InvokeRequired 解决跨线程访问控件

    C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它. Windows 窗体中 ...

  2. winform使用多线程时跨线程访问控件

    之前写winform用多线程,在子线程里访问窗体控件需要用委托,由于委托使用不熟练,在网上找的各种方法都觉得太复杂看不懂,后来发现一种写法如下: if (pictureBox1.InvokeRequi ...

  3. C#中跨线程访问控件问题解决方案

    net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,推荐的解决方法是采用代理,用代理方法来间接操作不是同一线程创建的控件. 第二种方法是禁止编译器对跨线程访问作检查,可以实现访问,但是出不出 ...

  4. VS2005中,C#中跨线程访问控件问题解决方案

    最近我在做一个项目,遇到了跨线程要去访问页面控件.但是总是提示出错,不能在其它线程中修改创建控件的线程的控件的值,后来采用了匿名代理,结果很轻松地解决了.解决过程如下: 首先在窗体上,创建一个list ...

  5. 跨线程操作无效:从创建该线程的线程以外的线程访问控件

    我有一个场景. (Windows窗体,C#.. NET) 有一个主窗体可以承载一些用户控件. 用户控件执行一些繁重的数据操作,因此,如果我直接调用UserControl_Load方法,则UI在加载方法 ...

  6. 多线程总结之旅(12):跨线程调用控件的几种方式

    本来是写完线程池就结束多线程总结之旅系列的,但是想想平时在项目中用到线程仅仅不够的,为什么这么说呢?举个例子:我们有一个函数,它的功能就是加载数据,然后绑定到datagridview.现在我们开启一个 ...

  7. WinForm中新开一个线程操作窗体上的控件(跨线程操作控件)GOOD

    http://www.cnblogs.com/joey0210/p/3450379.html 最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录 ...

  8. c#跨线程操作控件(有UI操作)|及多线程操作

    仅记录(好多大佬都会): 跨线程操作UI控件 ※在.NET2.0之后为了线程之间的安全,不允许跨线程操作控件,最简单的解决办法是禁止检查,但一般不猜用此方法,会造成各线程之间的混乱,可用作临时调试使用 ...

  9. C# 跨线程调用控件

    在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应.  同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线程间操作无效 第一种办法:禁 ...

最新文章

  1. 【数据挖掘】卷积神经网络 ( 池化 | 丢弃 | 批量规范化 | 卷积神经网络完整流程示例 | 卷积 | 池化 | 全连接 | 输出 | 卷积神经网络总结 )
  2. cv2.putText 文字换行('\n')无法解析换行
  3. java使用不存在的字符串_jpa – java.lang.IllegalArgumentException:您试图使用查询字符串中不存在的字符串名称设置参数值...
  4. CF1192B Dynamic Diameter(LCT)
  5. 【OS学习笔记】三十 保护模式九:段页式内存管理机制概述
  6. 邮箱附件、QQ、微信等社交工具大文件传输解决方案
  7. zz 聊聊并发(二)
  8. 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统(源代码下载和PDF文档下载)...
  9. 【Java编译】含package的类文件编译
  10. 学习Java好书及视频推荐
  11. 通过图片url 获取图片file对象
  12. 1000+份计算机paper,卡耐基梅隆大学,芝加哥大学,facebook,google,微软,twitter等大牛一作,持续更新中...
  13. 计算机主机频率单位,计算机常见计量单位解析
  14. w10运行游戏计算机中丢失xinput1-3.dll,WIN10启动游戏由于找不到xinput13dll无法运行如何修复...
  15. vuerouter4报错:Discarded invalid param(s) “name“, “age“ when navigating.
  16. 修改苹果自带地图中的路线颜色
  17. nginx部署、配置优化
  18. 关闭搜狐微门户弹窗终极方法
  19. 数据库管理系统的层次结构--语言处理层
  20. 2018 OpenInfra Days China大咖来袭——开源,我们是认真的

热门文章

  1. linux ehci hcd之qh_urb_transaction()分析(二)
  2. android点击软键盘外面的区域关闭软键盘解决办法
  3. linux服务器time wait,Linux服务器TIME_WAIT进程的解决与原因
  4. Zabbix自定义监控tcp的ESTABLISHED状态的数量
  5. PDF编辑技巧4:删除水印、编辑图片和文字
  6. tomcat principle
  7. C++ list用法详解
  8. HotSpot VM
  9. 易览 v1.51 绿色
  10. 利用opencv结合mfc实现识别圆形标记点并计算多个圆形标记点的三维坐标,拟合平面并计算法向量