请选择 进入手机版 | 继续访问电脑版

工业软件开发社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 348|回复: 3

C# WinForm 跨线程访问控件(实用简洁写法)

[复制链接]

5

主题

20

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
发表于 2019-7-28 23:30:58 | 显示全部楼层 |阅读模式
辅助类代码:


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Windows.Forms;

  7. namespace Test
  8. {
  9.     static class ControlExtensions
  10.     {
  11.         /// <summary>
  12.         /// 同步执行 注:外层Try Catch语句不能捕获Code委托中的错误
  13.         /// </summary>
  14.         static public void UIThreadInvoke(this Control control, Action Code)
  15.         {
  16.             try
  17.             {
  18.                 if (control.InvokeRequired)
  19.                 {
  20.                     control.Invoke(Code);
  21.                     return;
  22.                 }
  23.                 Code.Invoke();
  24.             }
  25.             catch(Exception ex)
  26.             {
  27.                 throw ex;
  28.             }
  29.         }

  30.         /// <summary>
  31.         /// 异步执行 注:外层Try Catch语句不能捕获Code委托中的错误
  32.         /// </summary>
  33.         static public void UIThreadBeginInvoke(this Control control, Action Code)
  34.         {
  35.             if (control.InvokeRequired)
  36.             {
  37.                 control.BeginInvoke(Code);
  38.                 return;
  39.             }
  40.             Code.Invoke();
  41.         }
  42.     }
  43. }
复制代码
调用:



  1. private void ChangeBteText(string text)
  2.         {
  3.             Action DoAction = delegate ()
  4.              {
  5.                  this.label3. Text = text;
  6.                  this.label4.Text = text;
  7.                  this.label5.Text = text;
  8.              };
  9.             if (this.InvokeRequired)
  10.             {
  11.                 ControlExtensions.UIThreadBeginInvoke(this, delegate
  12.                 {
  13.                     DoAction();
  14.                 });
  15.             }
  16.             else
  17.             {
  18.                 DoAction();
  19.             }
  20.         }
复制代码
以上  

https://www.cnblogs.com/zhangguihua/p/9989376.html  重庆-寂寞的风
在测试中使用确实比较方便。
对于多线程不是很了解,欢迎各位一起讨论下!!








回复

使用道具 举报

5

主题

121

帖子

3

积分

新手上路

Rank: 1

积分
3
发表于 2019-7-29 09:57:41 | 显示全部楼层
有机会试一下
回复

使用道具 举报

3

主题

43

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2019-8-2 17:51:05 | 显示全部楼层
可以试下~~
回复

使用道具 举报

3

主题

43

帖子

156

积分

注册会员

Rank: 2

积分
156
发表于 2019-8-2 18:07:33 | 显示全部楼层
加你的群,被拒绝,然后就再也搜索不到你的QQ群。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|bbs.hslcommunication.cn

GMT+8, 2019-8-23 04:14 , Processed in 0.077582 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表