积极答复者
WPF中ProgessBar的界面响应问题

问题
-
大家好,现在我有一个按钮,后台执行了大量代码,想在UI中使用ProgressBar,增强用户体验,可是每次点击按钮,界面都会卡死,progressbar也没有任何响应..
1.我试用了BackGroundWorker,在DoEvent中执行我的耗时方法时,因为方法会调用大量UI元素,会提示线程被占用,如果在DoEvent中处理BackGroundWorker,在buttonClick中处理耗时方法,界面依旧卡死。
2.试用Dispacher.Invoke方法,界面依旧卡顿。
3.开启一个线程,在老线程上执行progressBar界面,没问题,但是在Thread.Start()方法开始执行后,ProgressBar在“半路”卡住,直至耗时方法代码执行完毕。
4.打开一个新窗口作为ProgressBar,因为原界面为小窗体,新窗体的出现位置很奇怪,效果也不是很好..
求指导,我应该怎么办?(注,我使用了Win8风格的ProgressBar-不确定条,只要处理它的Visibility属性即可)
附图一张:
实在是找不到解决方案才...求各位高手指点!
答案
-
Backgroundworker你不能把和UI打交道的逻辑全部扔入DoWork,而是必须先启用ReportWorkProcess那个属性,这样你DoWork每次完成到一定任务之后可以触发ReportProgress,然后在这里设置progress的数值。
具体可以参考:
http://msdn.microsoft.com/zh-cn/library/vstudio/system.componentmodel.backgroundworker.aspx
If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer
Help by clicking:
Click here to donate your rice to the poor
Click to Donate
Click to feed Dogs & Cats
Found any spamming-senders? Please report at: Spam Report- 已建议为答案 Lisa ZhuModerator 2013年6月21日 10:39
- 已标记为答案 Lisa ZhuModerator 2013年6月24日 12:13
全部回复
-
Backgroundworker你不能把和UI打交道的逻辑全部扔入DoWork,而是必须先启用ReportWorkProcess那个属性,这样你DoWork每次完成到一定任务之后可以触发ReportProgress,然后在这里设置progress的数值。
具体可以参考:
http://msdn.microsoft.com/zh-cn/library/vstudio/system.componentmodel.backgroundworker.aspx
If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer
Help by clicking:
Click here to donate your rice to the poor
Click to Donate
Click to feed Dogs & Cats
Found any spamming-senders? Please report at: Spam Report- 已建议为答案 Lisa ZhuModerator 2013年6月21日 10:39
- 已标记为答案 Lisa ZhuModerator 2013年6月24日 12:13