WinForm与WPF下跨线程调用控件
Winform下:
public delegate void UpadataTextCallBack(string str,TextBox text);
public void UpadtaText(string str, TextBox text)
{
if (text.InvokeRequired)
{
UpadataTextCallBack upadataTextCallBack = UpadtaText;
text.Invoke(upadataTextCallBack, new object[] {str, text});
}
else
{
text.Text = str;
}
}
然而在WPF下,并不支持Control.InvokeRequired。需要调用Dispatcher.Invoke()方法。
在 WPF 中,只有创建 DispatcherObject 的线程才能访问该对象。例如,一个从主 UI 线程派生的后台线程不能更新在该 UI 线程上创建的 Button的内容。为了使该后台线程能够访问 Button 的 Content 属性,该后台线程必须将此工作委托给与该 UI 线程关联的 Dispatcher。它使用Invoke 或BeginInvoke完成。Invoke是同步,BeginInvoke 是异步。该操作将按指定的 DispatcherPriority 添加到 Dispatcher 的事件队列中。
代码实例:
public delegate void UpadataTextCallBack(string str,TextBox text);public void UpadtaText(string str, TextBox text)
{if (!Dispatcher.CheckAccess()){Dispatcher.Invoke(DispatcherPriority.Send, new setListTextCallBack(UpadtaText),str,text);return;} text.Text = str;
}
转载于:https://www.cnblogs.com/dranched/p/5019662.html
WinForm与WPF下跨线程调用控件相关推荐
- 多线程总结之旅(12):跨线程调用控件的几种方式
本来是写完线程池就结束多线程总结之旅系列的,但是想想平时在项目中用到线程仅仅不够的,为什么这么说呢?举个例子:我们有一个函数,它的功能就是加载数据,然后绑定到datagridview.现在我们开启一个 ...
- C# 跨线程调用控件
在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应. 同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线程间操作无效 第一种办法:禁 ...
- 跨线程调用控件之MethodInvoker
这是一部分重要的代码,用VS2005通过. 使用到两个控件,一个按钮button1,一个标签label1. private void button1_Click(object sender, Even ...
- winform使用多线程时跨线程访问控件
之前写winform用多线程,在子线程里访问窗体控件需要用委托,由于委托使用不熟练,在网上找的各种方法都觉得太复杂看不懂,后来发现一种写法如下: if (pictureBox1.InvokeRequi ...
- c# winform InvokeRequired 解决跨线程访问控件
C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它. Windows 窗体中 ...
- WinForm中新开一个线程操作窗体上的控件(跨线程操作控件)GOOD
http://www.cnblogs.com/joey0210/p/3450379.html 最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录 ...
- C#跨线程操作控件的线程安全方法
C#跨线程操作控件的线程安全方法 在C#中,经常用到这样一个场景,Windows Form程序启动一个工作者线程执行一部分工作,这样做是为了避免速度慢的工作如果直接调用会使得主Form停止响应一段时间 ...
- 跨线程取出控件的值的写法(不是跨线程赋予控件值)
//这个方法是跨线程取出控件的值,不是跨线程赋予控件值private delegate void DelegateGetControl(各种参数);private void GetControl(各种 ...
- c#跨线程操作控件(有UI操作)|及多线程操作
仅记录(好多大佬都会): 跨线程操作UI控件 ※在.NET2.0之后为了线程之间的安全,不允许跨线程操作控件,最简单的解决办法是禁止检查,但一般不猜用此方法,会造成各线程之间的混乱,可用作临时调试使用 ...
- c#使用MethodInvoker解决跨线程访问控件
c#使用MethodInvoker解决跨线程访问控件 .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线程访问作检查,Control.CheckForIlle ...
最新文章
- Android开发教程 - 使用Data Binding(二)集成与配置
- [微信小程序]给data的对象的属性赋值
- TF-IDF(term frequency–inverse document frequency)
- solr4 mysql自动更新_(solr系列:五) solr定时实时重建索引和增量更新
- k8s高可用集群_搭建高可用集群(部署master2和node节点)---K8S_Google工作笔记0058
- mysql 导出过长的数字列时变科学计数法问题解决办法
- Q-Fish 升级技嘉主板BIOS
- 水表188协议测试软件,水表下行通信规约标准188协议-V1.5标准版.pdf
- jenkins备份恢复
- Hbase2.4.1集群安装:HMaster自动挂掉问题终于解决了
- 推荐系统系列:新浪搜索团队FiBiNET理论和代码实现
- 济南商讯在线计算机,迅时IP话机 NRP2000W
- 边云协同的优点_边缘计算的云边协同
- 交房后,如何办理产权证、土地证?
- 公众号怎么设置滑动文字_这种微信公众号里面滑动是怎么操作的?
- [NAS] Synology (群晖) DSM7.0 使用自定义供应商DDNS
- 交货状态html什么意思,Marc Jacobs The Uptown 手提包
- 逆向工具/反编译工具 集合
- 14-6 使用 glade 完成布局
- 位运算 - 多个整形变量的合并和拆分
热门文章
- c语言计算总分和平均分float,用C语言编程平均分数
- Hbase table CRUD操作及scala编程
- java 获取及修改系统变量
- TinyML与Tensor Flow Lite的关系
- profile和bashrc
- 简述C#中IO的应用 RabbitMQ安装笔记 一次线上问题引发的对于C#中相等判断的思考 ef和mysql使用(一) ASP.NET/MVC/Core的HTTP请求流程...
- 对话中国AI先锋,生态科技岛首秀深圳
- 过目不忘JS正则表达式(转)
- date命令 简单使用
- Git详解之二 Git基础(第二部分)