none
WPF中ProgessBar的界面响应问题 RRS feed

  • 问题

  • 大家好,现在我有一个按钮,后台执行了大量代码,想在UI中使用ProgressBar,增强用户体验,可是每次点击按钮,界面都会卡死,progressbar也没有任何响应..

    1.我试用了BackGroundWorker,在DoEvent中执行我的耗时方法时,因为方法会调用大量UI元素,会提示线程被占用,如果在DoEvent中处理BackGroundWorker,在buttonClick中处理耗时方法,界面依旧卡死。

    2.试用Dispacher.Invoke方法,界面依旧卡顿。

    3.开启一个线程,在老线程上执行progressBar界面,没问题,但是在Thread.Start()方法开始执行后,ProgressBar在“半路”卡住,直至耗时方法代码执行完毕。

    4.打开一个新窗口作为ProgressBar,因为原界面为小窗体,新窗体的出现位置很奇怪,效果也不是很好..

    求指导,我应该怎么办?(注,我使用了Win8风格的ProgressBar-不确定条,只要处理它的Visibility属性即可)

    附图一张:

    实在是找不到解决方案才...求各位高手指点!

    2013年6月6日 15:15

答案

  • 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

    2013年6月20日 11:05

全部回复