背景

当前串口通讯项目,多个线程需要同时利用richTextBoxMsg控件打印信息,直接调用会造成线程不安全,严重的时候会直接导致UI线程挂掉,因此本篇就跨线程调用UI控件做个记录。

正文

  • 定义控件的委托类型
// 提示界面控件的委托类型
delegate void ShowInfoCallback(string text, bool handle);
  • 定义操作该控件的函数
//该函数会在非创建UI控件的线程调用下,进行委托,由UI线程进行操作UI控件;
//若该函数由创建该UI控件的线程调用,则直接进行操作。
// handle 为 true,则为控件使用.text;为false,则控件使用.Appendtext
private void Showinfo(string text, bool handle)
{
if (this.richTextBoxMsg.InvokeRequired)
{ //若是创建控件的线程与调用该函数的线程不是同一个线程则进入
while (!this.richTextBoxMsg.IsHandleCreated)
{
if (this.richTextBoxMsg.Disposing || this.richTextBoxMsg.IsDisposed)
{// 解决窗体关闭时出现“访问已释放句柄的异常”
return;
}
}
ShowInfoCallback d = new ShowInfoCallback(Showinfo);
this.richTextBoxMsg.Invoke(d, new object[] { text, handle });
}
else
{
if(handle == true)
{
this.richTextBoxMsg.Text = text;
}
else
{
this.richTextBoxMsg.AppendText(text);
} }
}
  • 调用方法

    直接调用即可。

至此记录完毕。

参考链接

记录时间:2017-05-25

记录地点:江苏淮安

Visual studio之C#跨线程调用UI控件的更多相关文章

  1. 跨线程访问UI控件时的Lambda表达式

    工作中经常会用到跨线程访问UI控件的情况,由于.net本身机制,是不允许在非UI线程访问UI控件的,实际上跨线程访问UI控件还是 将访问UI的操作交给UI线程来处理的, 利用Control.Invok ...

  2. (转).NET 4.5中使用Task.Run和Parallel.For()实现的C# Winform多线程任务及跨线程更新UI控件综合实例

    http://2sharings.com/2014/net-4-5-task-run-parallel-for-winform-cross-multiple-threads-update-ui-dem ...

  3. Atitit.swt 线程调用ui控件的方法

    Atitit.swt 线程调用ui控件的方法 1 SwingUtilities.invokeLater1 2 display.asyncExec方法1 3  display.timerExec(500 ...

  4. C# 跨线程调用form控件技巧及byte[]与string型相互转换

    跨线程调用form控件技巧 private delegate void MethodSocket(object obj);//使用托管 ss = "OK"; this.BeginI ...

  5. C#跨线程调用窗体控件(比如TextBox)引发的线程安全问题

    如何:对 Windows 窗体控件进行线程安全调用 访问 Windows 窗体控件本质上不是线程安全的. 如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态. 还可能会出现 ...

  6. C# Winform 跨线程更新UI控件常用方法汇总(多线程访问UI控件)

    概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常.处理跨线程更新Winform UI控件常用的方法有4种:1. ...

  7. C# Winform 跨线程更新UI控件常用方法总结(转)

    出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件 ...

  8. 理解SynchronizationContext,如何在Winform里面跨线程访问UI控件

    SynchronizationContext 类是一个基类,可提供不带同步的自由线程上下文. 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为.此模型 ...

  9. WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )

    WPF:谈谈各种多线程去修改或访问UI线程数据的方法http://www.cnblogs.com/mgen/archive/2012/03/10/2389509.html 子线程非法访问UI线程的数据 ...

随机推荐

  1. 【OpenStack】源码级深入了解删除虚拟机操作

    首先看一下虚拟机有多少种状态:(/nova/compute/vmstates.py) ACTIVE = 'active' # VM is running BUILDING = 'building' # ...

  2. 旺财C# .NET代码生成器之DTcms4/5代码批量生成功能

    经近半年的实战积累.于2017年6月底,增加对第三方开源软件DTcms(4和5都支持)的代码生成支持. 可以一键生成的DTcms4/5代码如下:1.Model经典三层实体2.DAL经典三层数据库访问层 ...

  3. eclipse git解决冲突

    转自 http://blog.csdn.net/rosten/article/details/17068285 1.工程->Team->同步:  2.从远程pull至本地,就会出现如下内容 ...

  4. noip 2008 传纸条

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...

  5. 【Floyd】POJ2139 -Six Degrees of Cowvin Bacon

    普通的Floyd了分分秒可以水过,结果在submit前删调试段落的时候把程序本体给删了吃了两个WA…… #include<iostream> #include<cstring> ...

  6. 【bugku】【ZSCTF】【迷宫RE】Take The Maze WriteUp

    Take The Maze 首先拿进PEID里查一下有没有壳: 无壳,果断拖进IDA.可是Graph View中找不到主程序的位置,在函数表里寻找主函数: 函数太多阻扰了我们找到主程序,运行一下程序找 ...

  7. 网络数据包分析 网卡Offload

    http://blog.nsfocus.net/network-packets-analysis-nic-offload/     对于网络安全来说,网络传输数据包的捕获和分析是个基础工作,绿盟科技研 ...

  8. Eclipse调试远程服务器

    原文:https://blog.csdn.net/fengshizty/article/details/45126737 Eclipse提供能调试远程服务器的功能,最近做微信开发,需要部署到远程服务器 ...

  9. 【JSP JSTL】<c:if>多个判断条件 + <c:foreach>满足条件跳出循环

    有一个需求,将所拥有的权限存放于session中,现在JSP页面判断这些如果在所有权限中有某一个或者某几个,就显示相对应的页面内容 举一个例子,实现以上的逻辑,<c:if>多个判断条件 + ...

  10. 关于Java代码优化的44条建议!

    关于Java代码优化的N条建议! 本文是作者:五月的仓颉 结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,作者的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼 ...