2011-02-07 75 views
1

(WPF)我們被要求構建一個小窗口,在應用程序忙時彈出(而不是等待光標)。我們在窗口中放置了一個文本塊,並且使用了IsIndeterminate = true的ProgressBar。單獨窗口中的進度條

我們在小窗口上調用show,然後啓動我們長時間運行的過程,當我們通過時在小窗口上調用Close。但是,在長時間運行的過程中,ProgressBar不顯示任何活動,小窗口在其標題中顯示(Not Responding)。

這甚至可能嗎?一個更好的主意?

回答

2

你需要考慮使用另一個線程(或多個線程),這樣做可能會需要更長的時間超過100ms重處理(100毫秒以上「沒有響應」前,可能會導致這種「掛」 appearence。)

您可以使用BackgroundWorker 對象創建新線程,並訂閱OnProgressChanged事件以指示進度欄更新。但是,這並沒有解決訪問主(UI)線程進度條的問題。您必須檢查是否需要調用,然後調用負責更新進度欄的代碼片段。

這裏是一個StackOverflow的問題,表明在接受的答案一個很好的擴展方法對控制調用一個方法調用:

Invoking

希望幫助!

1

問題很可能是,無論是什麼導致應用程序「忙」正在應用程序的主線程中運行。所以,應用程序停止響應,包括響應來自操作系統的佈局和繪畫請求。所以,當應用程序「忙碌」時,它太忙而無法繪製新窗口。

解決方案是儘可能多地將「繁重」移動到後臺線程中,以便主線程和UI因此保持響應。