WPF 线程操纵UI问题

WPF只允许UI线程修改UI,其他线程必须通过Invoke、委托(安全性)Winform可以开启/关闭“只允许UI线程修改UI”在WPF中非UI线程修改UI的方法:Dispatcher非UI线程直接修改UI,会报错System.InvalidOperationException:“调用线程无法访问此对象,因为另一个线程拥有该对象。”正确的做法是使用DispatcherDispatcher简单暴力,适合小工作量的修改一些界面内容长期后台工作应该考虑使用BackgroundWorker,有很多相关
摘要由CSDN通过智能技术生成

WPF只允许UI线程修改UI,其他线程必须通过Invoke、委托(安全性)
Winform可以开启/关闭“只允许UI线程修改UI”

在WPF中非UI线程修改UI的方法:Dispatcher

非UI线程直接修改UI,会报错

System.InvalidOperationException:“调用线程无法访问此对象,因为另一个线程拥有该对象。”
正确的做法是使用Dispatcher
Dispatcher简单暴力,适合小工作量的修改一些界面内容
长期后台工作应该考虑使用BackgroundWorker,有很多相关功能库

Task t = new Task(() =>
{
	//wrong
	//NameLabel.Content = "我用非UI线程修改NameLabel的文字,失败了";

	NameLabel.Dispatcher.Invoke(new Action(delegate
	{
		NameLabel.Content = "我用UI线程修改了NameLabel的文字";
	}));
	Thread.Sleep(5000);
	this.Dispatcher.Invoke(new Action(() =>
	{
		NameLabel.Content = "我用UI线程修改了NameLabel的文字-2";
	}));
	Thread.Sleep(5000);
	this.Dispatcher.BeginInvoke(new Action(() =>
	{
		NameLabel.Content = "我用UI线程修改了NameLabel的文字-3";
	}));
});
t.Start();

Dispatcher使用一

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值