WPF不同线程之间的控件的访问
来源:互联网 发布:smartgit linux 安装 编辑:程序博客网 时间:2024/06/06 02:44
WPF不同线程之间的控件是不同访问的,为了能够访问其他线程之间的控件,需要用Dispatcher.Invoke执行一个新的活动即可。
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public
void SetNotes(string notes)
{
if (Dispatcher.Thread != Thread.CurrentThread)
{
this.txtNote.Dispatcher.Invoke(new
Action
(() =>
{
this.txtNote.Text += notes;
this.txtNote.Text +=
"\r"
;
this.txtNote.ScrollToEnd();
}));
}
else
{
this.txtNote.Text += notes;
this.txtNote.Text +=
"\r"
;
this.txtNote.ScrollToEnd();
}
}
WinForm中:
private delegate void delegateCrossThread(string message); private void SetStatus(string message) { if (this.m_StatusLabel.InvokeRequired == true) { delegateCrossThread ct = new delegateCrossThread(SetStatus); this.Invoke(ct, new object[] { message }); } else { this.m_StatusLabel.Text = message; this.m_StatusLabel.Refresh(); } }
3、异步打开窗口
Thread newWindowThread = new Thread(new ThreadStart(ThreadStartingPoint)); newWindowThread.SetApartmentState(ApartmentState.STA); newWindowThread.Start(); private void ThreadStartingPoint() { SurveyStatWindow surveyStatDialog = new SurveyStatWindow(); if (m_StatDataTable != null) { surveyStatDialog.TimeData = m_StatDataTable; surveyStatDialog.Init(); } surveyStatDialog.ShowDialog(); }
4、全局异步调用
Application.Current.Dispatcher.Invoke(
new
Action(() =>
{
AddText();
}));
this
.Dispatcher.Invoke(
new
Action(() =>
{
AddText();
}));
Application.Current.Dispatcher.Invoke(
new
Action(
delegate
{ AddText();}));
WPF中窗口控件的跨线程调用
在WinForm中,我们要跨线程访问窗口控件,只需要设置属性CheckForIllegalCrossThreadCalls = false;即可。
在WPF中要麻烦一下,同样的不允许跨线程访问,因为没有权限,访问了会抛异常;
没有CheckForIllegalCrossThreadCalls 属性,怎么办?
在WPF中的窗口控件都有一个Dispatcher属性,允许访问控件的线程;既然不允许直接访问,就告诉控件我们要干什么就好了。
方法如下:
private delegate void outputDelegate(string msg); private void output(string msg) { this.txtMessage.Dispatcher.Invoke(new outputDelegate(outputAction), msg); } private void outputAction(string msg) { this.txtMessage.AppendText(msg); this.txtMessage.AppendText("\n"); }
这里是要 输出一段字符串在TextBox中,只需要调用output方法就可以了。其它的处理同上!
阅读全文
0 0
- WPF不同线程之间的控件的访问
- wpf 非界面线程访问界面线程的控件
- WPF里面多线程访问UI线程、主线程的控件
- WPF不同界面之间的通信
- WPF 如何访问其他窗体的控件
- 超简单,三步就能在WPF里面多线程访问UI线程、主线程的控件
- WPF简单的跨线程控件实现
- 服务器不同application之间的相互访问
- SharedPreferences 不同app之间的访问
- 不同网段之间的访问问题
- 跨线程的控件访问
- java io 不同线程之间的通信
- 不同线程之间的通信方式
- WPF访问控件的父控件并且修改属性
- C#线程之间操作无效|不允许访问控件(c# 线程间操作无效: 从不是创建控件“”的线程访问它)
- WPF使用Page创建显示不同控件的程序
- WPF使用Page创建显示不同控件的程序
- WPF学习(1):控件之间的数据绑定
- url编码
- 对log4j的简单封装
- iOS多线程编程——GCD与NSOperation总结
- 微信朋友圈,QQ空间,微博等列表展示的功能实现
- 常用插件--bootstrap3-dialog
- WPF不同线程之间的控件的访问
- 第10周作业1(LeetCode1)
- python3使用requests包抓取并保存网页源码
- Linux虚拟网络之tun(三)隔离网络下的Raw转发
- 452. Minimum Number of Arrows to Burst Balloons Java解法
- ImageLoader使用及源码解析
- RadioButton动态设置Margin
- java 如果文件目录不存在就创建再写文件的代码实例--针对“系统找不到指定的路径”问题。
- mybatis 在select语句中使用foreach语句报错