作者name2name2 (yang~hi)
看板C_Sharp
标题[问题] WPF 与BackgroudWorker类似的方法
时间Thu Apr 14 14:19:50 2016
想请问WPF应用上有没有和BackgroudWorker效果相同的其他方法
我曾使用Backgroundworker让视窗按下按钮後执行onclick方法时,
方法执行的过程中可以设成一边回报进度到视窗的ProgressBar,
让ProgressBar在方法执行过程中视窗不会被锁死而能够持续显示进度变化,
--
另外发现如果用
Thread w = new Thread(() =>{
// 边执行方法边设定Progressbar进度Value或其他UI物件状态
});
好像会因为无法跨执行绪操控UI物件,
所以会出现Exception: 呼叫执行绪无法存取此物件 因为此物件属於另一个执行绪。
而若是用
Action methodDelegate = delegate()
{
// 边执行方法边设定Progressbar进度Value或其他物件状态
};
this.Dispatcher.BeginInvoke(methodDelegate);
或
Task task = new Task(() =>
{
ProgressBar物件名称.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle
, new Action(() =>
{
// 边执行方法边设定Progressbar进度Value或其他物件状态
}));
});
task.Start();
则方法执行过程中,跟使用一般方法一样,使用者介面会被锁住,
到了方法完全执行完後才会显示最後一次设定的进度,
中间过程的设定进度都会因为被锁住而无法呈现
--
想请问除了Backgroundworker之外,
还有其他方式能达到,
在方法执行过程中还能动态设定使用者介面产生变化吗? 谢谢~
--
~
Sent from my
PCMan Combo ~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.59.165.123
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1460614796.A.46D.html
※ 编辑: name2name2 (210.59.165.123), 04/14/2016 15:07:01
1F:→ Litfal: "执行方法"与"进度通知"应该分开来,前者用其他执行绪做 04/14 15:20
2F:→ Litfal: 後者才是Dispatcher去委派 04/14 15:20
3F:→ Litfal: 另外,在WPF里面,最好是习惯MVVM的写法 04/14 15:21
感谢回覆
※ 编辑: name2name2 (210.59.165.123), 04/14/2016 15:45:07
纪录其他找到的一些东西
Is there an alternative to use the Background Worker in WPF?
http://goo.gl/rqf1Iu
※ 编辑: name2name2 (210.59.165.123), 04/15/2016 10:24:37
4F:推 hatasum: thread里面呼叫dispatcher.begininvoke呢? 05/02 22:49