回答
這裏首先要了解的是,你應該執行新/編輯/刪除操作一個後臺線程,以保持您的UI響應,並使ProgressBar
能夠在這些操作完成所需的時間內進行更新。
將某些工作轉移到後臺線程的首選和最簡單的方法是使用任務並行庫(TPL)並開始一個新任務。請記住,WPF控件具有線程關聯性,因此只能在它們最初創建的線程上訪問它們,並且它是調度程序線程。
所以,你可以通過設置ProgressBar
到Visible
的Visibility
屬性實現這一點,開始執行實際新建/編輯/刪除操作的任務,然後設置Visibility
屬性回Collapsed
再次,一旦任務完成:
C#:
pb.Visibility = Visibility.Visible;
Task.Run(()=>
{
//perform your long-running operation here...make sure that you don't access any UI elements
Save();
})
.ContinueWith(task =>
{
//this delegate will be executed back on the UI thread once the task has finished because of the scheduler returned from the TaskScheduler.FromCurrentSynchronizationContext() method...
pb.Visibility = Visibility.Collapsed;
}, System.Threading.CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
XAML:
<ProgressBar x:Name="pb" IsIndeterminate="True" Visibility="Collapsed" />
在C#中,您可以使用工具箱中的progressBar工具顯示不確定的時間。
爲了使用progressBar只需將它拖放到窗體上。
現在要解決主要問題,您需要顯示一個不確定的時間。 要顯示在進度條的進度,則使用定時器和以下代碼:
int value = 0;
private void timer1_Tick(object sender, EventArgs e)
{
if (value < 100)//value at 100 can be any large integer since indeterminant time
{
value++;
progressBar1.Value = value;
}
}
組timer1.Interval = 100;
變量值是您爲progressBar設置的最大值。
由於您不知道時間,因此將progressBar的最大值設置爲10000或其他任何大值。 現在啓用計時器,當你輸入你的功能(說新/編輯/刪除),並禁用計時器,當你退出你的功能
我不立這個解決方案。你只是「欺騙」進度欄的值。相反,可以使用@ mm8答案中指出的進度條的Indeterminate屬性。 –
它可能是作弊,但會起作用。現在最主要的是,你沒有告訴用戶應用程序完成這些任務需要多少時間,因此不確定的時間。所以根據我的說法,當任務由應用程序完成時,您不需要顯示100%的進度條。 –
我不認爲這是很好的編程習慣。無論誰要在我之後維護代碼,肯定都會浪費時間來弄清楚發生了什麼。 – Igavshne
- 1. 進度條耗盡一段時間
- 2. 進度條不工作?
- 3. 進度條不工作
- 4. ajax進度條不工作?
- 5. ReactJS進度條不工作
- 6. 背景工作進度條
- 7. 使用閃屏和webview時Android進度條不工作
- 8. 進度條和計時器
- 9. 使用進度條異步加載耗時的腳本
- 10. 進度條的Js代碼,不工作
- 11. 如何製作類似iPhone進度條的進度條和進度對話框?
- 12. 從工作線程更新進度條
- 13. Combobox進度條無法正常工作
- 14. Android進度條無法正常工作
- 15. c#進度條無法正常工作
- 16. 進度條工作不沖水
- 17. qt進度條不能正常工作
- 18. 進度條不工作與ASIHTTPRequest
- 19. 不能讓進度條工作
- 20. 進度條無法正常工作
- 21. 後臺工作線程進度條
- 22. 進度條無法正常工作
- 23. 在工作時顯示帶進度條的窗口
- 24. 音樂播放器的進度條不工作和崩潰
- 25. jplayer的播放按鈕和進度條在Firefox中不工作
- 26. r和系統時間的進度條
- 27. Android工作室暫停和恢復進度條的倒數計時器
- 28. Miltitasking和進度條
- 29. 進度條和requiredfieldvalidator
- 30. 進度條和ThreadAbortException
上面給出的C#通常位於xaml.cs文件中嗎?我在ViewModel中具有新建/編輯/刪除功能,並通過命令「訪問」。我對WPF和MVVM非常陌生,我只是試圖找到最好的做法,但我並不是很擅長。此外,例如刪除,我從列表框(顯然是一個UI元素),也從解決方案資源管理器(我忙於一個VS包擴展)刪除項目,這最後一個需要幾秒鐘。所以我不確定我不應該像你說的那樣訪問一個UI元素? – Igavshne
應該在視圖模型中實現新建/編輯/刪除功能。不是直接設置ProgressBar的Visibility屬性,而是設置綁定到ProgressBar的源屬性的值。我猜你的操作實際上執行了一些可能需要一些時間的工作,例如與數據庫或服務層進行通信。如果你只是想從列表框中刪除一個項目,或者更確切地說是綁定到列表框的ObservableCollection,你根本不需要ProgressBar。 – mm8
啊,是的,當然,我可以設置綁定到ProgressBar的源屬性的值。是的,我確實與一個數據庫進行了溝通。謝謝,我會嘗試你的答案,然後回來。 – Igavshne