在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方法就可以了。其它的处理同上!
本文详细介绍了在WPF中如何解决不允许跨线程访问窗口控件的问题,通过使用Dispatcher属性和委派函数,实现安全地在不同线程间访问控件。包括实例演示和代码解析。

749

被折叠的 条评论
为什么被折叠?



