wpf程序线程与UI内容交互

在UI线程里执行复杂的操作,会造成UI假死。常用的解决方法是开2个线程。

而新线程要调用UI里的东西,必须这么用:

this.Dispatcher.Invoke(content);
时间: 2024-10-20 03:28:32

wpf程序线程与UI内容交互的相关文章

Android关于线程更新UI的方法

Android关于线程更新UI的方法 在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process.   一个Android 程序默认情况下也只有一个Process,但一个Process下却可以有许多个Thread.   在

WPF 支持的多线程 UI 并不是线程安全的

原文:WPF 支持的多线程 UI 并不是线程安全的 WPF 支持创建多个 UI 线程,跨窗口的或者窗口内的都是可以的:但是这个过程并不是线程安全的. 你有极低的概率会遇到 WPF 多线程 UI 的线程安全问题,说直接点就是崩溃.本文将讲述其线程安全问题. 此问题现已报告给微软:Creating multi-thread UI has a low probability to crash · Issue #297 · dotnet/wpf 本文内容 简述这个线程安全问题 复现步骤 简述这个线程安全

一种WPF在后台线程更新UI界面的简便方法

WPF框架规定只有UI线程(主线程)可以更新界面,所有其他后台线程无法直接更新界面.幸好,WPF提供的SynchronizationContext类以及C#的Lambda表达式提供了一种方便的解决方法.以下是代码: public static SynchronizationContext s_SC = Synchronization.Current; //主窗口类的静态成员 在App类中: static Thread s_MainThread = Thread.CurrentThread; //

使用WPF来创建 Metro UI程序

本文转载:http://www.cnblogs.com/TianFang/p/3184211.html 这个是我以前网上看到的一篇文章,原文地址是:Building a Metro UI with WPF,这篇文章一步步的介绍了如何实现一个Metro样式的窗口,并且效果非常好.今天看到OSChina上有这篇文章的译文:使用WPF来创建 Metro UI,翻译得非常好,这里推荐一下. 值得一提的是,除了这种一步步来的方式外,现在Codeplex中也有不少比较好的metro风格的wpf框架,可以帮助

在WPF程序中将控件所呈现的内容保存成图像(转载)

在WPF程序中将控件所呈现的内容保存成图像 转自:http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html 有的时候,我们需要将控件所呈现的内容保存成图像保存下来,例如:InkCanvas的手写墨迹,WebBrowser中的网页等.可能有人会说,这个不就是截图嘛,找到控件的坐标和大小,调用截图API不就可以了嘛.的确,对于规则的控件来说,通过截图的却可以实现,可是,如果控件不规则或不透明度不是100%,则会把其背景控件的视觉效

WPF Dispatcher.BeginInvoke子线程更新UI

原文:WPF Dispatcher.BeginInvoke子线程更新UI 在开发WPF应用时出现:"调用线程无法访问此对象,因为另一个线程拥有该对象." 是因为UI线程是WPF应用的主线程,若尝试子线程更新UI线程应使用Dispatcher.BeginInvoke()或者Invoke()方法. Dispatcher.BeginInvoke() //异步执行,不等待委托结束就更新 Dispatcher.Invoke()          //代表同步执行 Action()       

提高WPF程序性能的几条建议

这篇博客将介绍一些提高WPF程序的建议(水平有限,如果建议有误,请指正.) 1. 加快WPF程序的启动速度: (1).减少需要显示的元素数量,去除不需要或者冗余的XAML元素代码. (2).使用UI虚拟化,只显示当前需要显示的元素. (3).不要把不要显示的自定义控件隐藏在主界面中,虽然它们不会显示出来,但是程序启动时还是会去计算自定义控件所需的空间和位置. 2. 耗时操作放在放在非UI线程上处理,保持UI的顺畅.处理完成后如果需要在UI上展示,调用Dispatcher.BeginInoke()

在 WPF 程序中使用 MVVM 模式

MVVM 模式是一个很久之前的技术了,最近因为一个项目的原因,需要使用 WPF 技术,所以,重新翻出来从前的一段程序,重温一下当年的技术. MVVM 模式 MVVM 实际上涉及三个部分,Model, View 和 ViewModel ,三者的关系如下图所示. 在三部分的关系中,视图显示的内容和操作完全依赖于 ViewModel. Model 是应用程序的核心,代表着最大.最重要的业务资产,因为它记录了所有复杂的业务实体.它们之间的关系以及它们的功能. Model 之上是 ViewModel.Vi

Wpf 调用线程无法访问此对象,因为另一个线程拥有该对象,解决方案

1.Wpf 多线程修改UI示例: //启动线程修改UI,抛出异常 ThreadPool.QueueUserWorkItem((q) => { button.Content = "张三"; }, null); 解决方案:使用Dispatcher.BeginInvoke+委托方式,修改UI 将修改UI的代码封装在委托中 //启动线程处理 Thread thread1 = new Thread(UpdateBtn); thread1.IsBackground = true;//设置为后