WinForm与WPF下跨线程调用控件
2015-12-04 16:26
211 查看
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 (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; }
相关文章推荐
- iOS开发-多线程-线程间通讯
- AC 与 GLPI的MAC地址自动同步脚本 expect mail ver4.0【最新】
- Mysql几种索引类型的区别及适用情况(转载)
- Dynamics CRM 为Visual Studio 2015安装CRM Developer Toolkit
- 需要学习的blog
- Ubuntu ROS Arduino Gazebo学习镜像iso说明(indigo版)
- Dynamics CRM 为Visual Studio 2015安装CRM Developer Toolkit
- Dynamics CRM 为Visual Studio 2015安装CRM Developer Toolkit
- Ubuntu ROS Arduino Gazebo学习镜像iso说明(indigo版)
- Ubuntu ROS Arduino Gazebo学习镜像iso说明(indigo版)
- Dynamics CRM 为Visual Studio 2015安装CRM Developer Toolkit
- 算法学习之求数列和
- 第8章 网络安全
- iOS开发——warning: directory not found for option ' '
- <s:set>标签的用法
- 理解 Memory barrier(内存屏障)【转】
- MySQL内存使用-线程独享
- IDirect3DSurface9 GetDC失败
- pageadmin企业建站系统为中小企业轻松搭建企业网站
- CentOS下设置默认JDK