2013-11-01 46 views
-1

我需要將我的進度欄暫停幾秒鐘,然後再回到空值。我需要將我的進度欄暫停幾秒鐘,然後再回到空

我正在使用後臺工作。

進度條中的完成並不明顯,我想讓用戶有時間注意完成的工作。

我不想使用「Thread.sleep」,因爲它會讓我的程序變慢。我認爲凍結ui可能會有所幫助,因爲我所有的工作都是在後臺線程中完成的,但我不知道如何去做。

+4

只需將進度欄保持爲100%,即會顯示一個消息框,指出「操作已完成」,並在用戶單擊消息框上的確定時清零進度欄。 –

+6

不要凍結UI,你的用戶會恨你。 –

+1

爲什麼你認爲Thread.Sleep會讓你的程序變慢?畢竟,你想等待一些(毫秒)和Thread.Sleep做得很好。 – Markus

回答

0

我終於解決了這個問題。雖然我沒有真正凍結用戶界面,也沒有使用thread.sleep。 我進入了最後一個子功能,並將進度報告爲100。因此,當它完成該功能時,進度條也會達到100.但是,需要幾毫秒才能返回到dowork函數,然後返回到runworker完成。它提供了一個窗口讓用戶注意到它已完成。感謝大家!

我感謝您的所有努力和建議。

0

我同意做Thread.Sleep似乎錯了解決這個問題。問題不在於你的計算,這是一個演示問題。也許使用某種動畫來解決你的問題。不知道你正在使用,但看看這個線程看到的jQuery進度動畫:

How do you animate the value for a jQuery UI progressbar?

+2

我想你已經假設OP正在使用Web解決方案。它沒有直接聲明,但標籤建議其直c#。 – paqogomez

2

這是使用新asyncawait關鍵字一個完美的方案。

private async void YourBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    YourProgressBar.Value = 100; 
    await Task.Delay(100); 
    YourProgressBar.Value = 0; 
} 
+0

我確實嘗試過,但它不適用於我。謝謝 – Avi

+0

@Avi:什麼都行不通?你收到錯誤信息了嗎? –

+0

等待和異步未被識別。當我找到解決方案時,我沒有費心去嘗試讓他們工作。 – Avi