2011-02-07 70 views
1

(WPF)我们被要求构建一个小窗口,在应用程序忙时弹出(而不是等待光标)。我们在窗口中放置了一个文本块,并且使用了IsIndeterminate = true的ProgressBar。单独窗口中的进度条

我们在小窗口上调用show,然后启动我们长时间运行的过程,当我们通过时在小窗口上调用Close。但是,在长时间运行的过程中,ProgressBar不显示任何活动,小窗口在其标题中显示(Not Responding)。

这甚至可能吗?一个更好的主意?

回答

2

你需要考虑使用另一个线程(或多个线程),这样做可能会需要更长的时间超过100ms重处理(100毫秒以上“没有响应”前,可能会导致这种“挂” appearence。)

您可以使用BackgroundWorker 对象创建新线程,并订阅OnProgressChanged事件以指示进度栏更新。但是,这并没有解决访问主(UI)线程进度条的问题。您必须检查是否需要调用,然后调用负责更新进度栏的代码片段。

这里是一个StackOverflow的问题,表明在接受的答案一个很好的扩展方法对控制调用一个方法调用:

Invoking

希望帮助!

1

问题很可能是,无论是什么导致应用程序“忙”正在应用程序的主线程中运行。所以,应用程序停止响应,包括响应来自操作系统的布局和绘画请求。所以,当应用程序“忙碌”时,它太忙而无法绘制新窗口。

解决方案是尽可能多地将“繁重”移动到后台线程中,以便主线程和UI因此保持响应。