C# 自定义线程修改UI(一)
在Wpf中界面显示数据的修改,都是通过UI线程完成,如果尝试从其他线程中直接修改控件的值回抛出异常,“调用线程无法访问此对象,因为另一个线程拥有该对象”。
例如:http://www.cnblogs.com/tianma3798/p/5762016.html
解决方案1:通过Invoke或者BeginInvoke将操作发送给Dispatcher 对象,委托Dispatcher去执行UI操作,每个UI控件都有Dispatcher 对象
代码实例:
Xaml代码
<ProgressBar x:Name="progressOne"
Minimum="0" Maximum="1"
Height="30" Margin="10,85,10,0"
VerticalAlignment="Top"/>
<!--绑定 进度条的值,并格式化为百分数-->
<Label x:Name="label" Content="{Binding ElementName=progressOne,Path=Value}"
ContentStringFormat="{}{0:P2}"
HorizontalAlignment="Left"
Margin="110,120,0,0"
FontWeight="Bold" Foreground="Red"
VerticalAlignment="Top"/>
C#代码
//启动前程修改UI数据
Task.Run(() =>
{
int i = ;
while (true)
{
i++;
if (i == )
i = ;
//定义修改UI委托
Action<int> action1 = (q) =>
{
progressOne.Value = q/100.0;
};
progressOne.Dispatcher.BeginInvoke(action1, i);
Thread.Sleep();
}
});
显示:

解决方案2:使用Wpf的双向绑定,在自定义线程中修改源数据,自动通知到UI线程修改界面显示
这种方式有个好处,只关心数据的修改,界面多出使用该数据的界面自动修改
更多双向绑定:http://www.cnblogs.com/tianma3798/p/5765464.html
代码实例:
Xaml代码
<Grid>
<Slider x:Name="slider"
Height="30"
Value="{Binding Path=Result,Mode=TwoWay}" Minimum="0" Maximum="100"
Margin="35,120,25,0" VerticalAlignment="Top"/>
<Label x:Name="label" Content="{Binding Path=Result,Mode=TwoWay}"
ContentStringFormat="当前值:{0}"
HorizontalAlignment="Left"
FontWeight="Bold" Foreground="Red"
Margin="95,165,0,0"
VerticalAlignment="Top"/>
</Grid>
C#代码
//双向绑定数据
NumberData data = new NumberData();
slider.DataContext = data;
label.DataContext = data;
//启动线程修改绑定数据,界面内容会同步修改
Task.Run(() =>
{
int i = ;
while (true)
{
i++;
if (i == ) i = ;
//修改双向绑定属性
data.Result = i;
Thread.Sleep();
}
});
/// <summary>
/// 实现INotifyPropertyChanged接口,通知
/// </summary>
public class NumberData : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; private int _Result;
public int Result
{
get { return _Result; }
set
{
_Result = value;
if (this.PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Result"));
}
}
}

更多异步修改UI:http://www.cnblogs.com/tianma3798/p/5766691.html
C# 自定义线程修改UI(一)的更多相关文章
- C#-WinForm跨线程修改UI界面
待解决的问题 在我做WinForm开发的过程中,经常会遇到耗时操作或阻塞操作.他们会引发软件的卡顿甚至假死,严重影响软件的使用. 因此,这类耗时或阻塞的操作一般都会使用异步的方式去执行,不影响主线程( ...
- 小知识 安卓线程和ui
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- 线程操纵UI问题
WPF只允许UI线程修改UI,其他线程必须通过Invoke.委托(安全性)Winform可以开启/关闭“只允许UI线程修改UI” 在WPF中非UI线程修改UI的方法 非UI线程直接修改UI,会报错 S ...
- 03_主线程联网问题&ANR&子线程不能修改UI
如果不使用HAXM,恐怕网页源码查看器无法获取servlet的源码.初步猜测是安卓模拟器运行速度太慢了.如果CPU不支持VT-x的话,HAXM是安装不上的.所以可以先开启VT-x. 可以参考几篇文章h ...
- Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
- 恶补Java Swing线程刷新UI机制(由浅到深的参考大佬博文)
1. java中进度条不能更新问题的研究 感谢大佬:https://blog.csdn.net/smartcat86/article/details/2226681 为什么进度条在事件处理过程中不更新 ...
- 学习通过Thread+Handler实现非UI线程更新UI组件
[Android线程机制] 出于性能考虑,Android的UI操作并不是线程安全的,这就意味着如果有多个线程并发操作UI组件,可能导致线程安全问题.为了解决这个问题,Android制定了一条简单的规则 ...
- Asp.net Core WebApi 使用Swagger做帮助文档,并且自定义Swagger的UI
WebApi写好之后,在线帮助文档以及能够在线调试的工具是专业化的表现,而Swagger毫无疑问是做Docs的最佳工具,自动生成每个Controller的接口说明,自动将参数解析成json,并且能够在 ...
- Android子线程更新UI的方法总结
版权声明:本文为博主原创文章,转载请注明出处:https://i.cnblogs.com/EditPosts.aspx?postid=6121280 消息机制,对于Android开发者来说,应该是非常 ...
随机推荐
- nginx下搭建fastcgi的开发环境
在上一章最简单理解CGI,FastCGI,WSGI 我们将fastcgi规范类比HTTP.下面我们通过一个案例更加明白fastcgi 我们使用的是 nginx作为前端 代理,我们包装了gevent_ ...
- codeforces C. Restore Graph
题意:构造一个有n个顶点,每个点度不超过k,然后给出每一个点到达一个定点的最短距离d数组,然后构造出这样的一个图: 思路:排序之后,有两个距离为0的或者没有直接输出-1,然后用两个游动下表,后面的与前 ...
- OLAP 大表和小表并行hash join
一个表50MB 一个表10GB 50M表做驱动表,放在PGA里 这时候慢在对对 10g 的全表扫描 对10个G扫描块 需要开并行 我有这样一个算法 一个进程 读 50mb 8进程 来 扫描 10gb ...
- JFS 文件系统概述及布局分析
JFS 文件系统概述及布局分析 日志文件系统如何缩短系统重启时间 如果发生系统崩溃,JFS 提供了快速文件系统重启.通过使用数据库日志技术,JFS 能在几秒或几分钟之内把文件系统恢复到一致状态,而非日 ...
- CodeAssistant
软件名:CodeAssistant 很霸气的名字,不过目前仅有的功能是代码格式化. 用途: 在向大神请教时,不妨用这小软件把自己的代码格一下.我们的口号就是让大神看得舒心,让BUG无处遁形. 演示: ...
- 「Poetize7」电话线路
描述 每台电话都有一个独一无二的号码,用一个十位的十进制数字串表示.电话a和b之间能直接通信,当且仅当“a与b之间仅有一个数字不同”,或者“交换a的某 两位上的数字后,a与b相同”.而a.b之间建立通 ...
- 「Poetize5」水叮当的舞步
Description 水叮当得到了一块五颜六色的格子形地毯作为生日礼物,更加特别的是,地毯上格子的颜色还能随着踩踏而改变. 为了讨好她的偶像虹猫,水叮当决定在地毯上跳一支轻盈的舞来卖萌~~~ 地毯上 ...
- selenuim ide回放时出现的问题
[error] Unexpected Exception: fileName -> chrome://selenium-ide/content/selenium-core/scripts/htm ...
- kafka在zookeeper中的存储结构
参考site:http://kafka.apache.org/documentation.html#impl_zookeeper 1.zookeeper客户端相关命令 在确保zookeeper服务启动 ...
- HDOJ(HDU) 2109 Fighting for HDU(简单排序比较)
Problem Description 在上一回,我们让你猜测海东集团用地的形状,你猜对了吗?不管结果如何,都没关系,下面我继续向大家讲解海东集团的发展情况: 在最初的两年里,HDU发展非常迅速,综合 ...