我正在開發winform(c#),用於啓動/停止/重新啓動Windows服務。我想要放置一個進度條,直到動作完成。我是.net編程新手。請幫助我實現這一目標。未知進程時間的進度條
4
A
回答
7
當你不知道需要多長時間時,你不能顯示有意義的進展。您無法知道,服務需要1到30秒的時間才能啓動。你所能做的就是向用戶展示一個「我沒死,正在工作」的指示器。 ProgressBar支持,將Style屬性設置爲「Marquee」。
您還需要在工作線程中啓動服務以避免您的UI凍結。最好用BackgroundWorker完成。使它看起來類似於這樣:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
ServiceProgressBar.Style = ProgressBarStyle.Marquee;
ServiceProgressBar.Visible = false;
}
private void StartButton_Click(object sender, EventArgs e) {
this.StartButton.Enabled = false;
this.ServiceProgressBar.Visible = true;
this.backgroundWorker1.RunWorkerAsync("foo");
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
var ctl = new ServiceController((string)e.Argument);
ctl.Start();
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {
this.StartButton.Enabled = true;
this.ServiceProgressBar.Visible = false;
if (e.Error != null) {
MessageBox.Show(e.Error.ToString(), "Could not start service");
}
}
1
您必須將小部件的開始/停止/重新啓動進度分開,並在部件完成後設置進度條。
對於即時更新,您需要了解執行的方法以獲取有關其狀態的反饋。
1
您的意思是說您想要啓動/重新啓動/停止多個服務,並且希望進度條指示「您已處理了要啓動/重新啓動/停止的服務列表多少」?你可以這樣做:
progressBar.Maximum = listOfServicesToStart.Count;
progressBar.Value = 0;
for (int i = 0; i < listOfServicesToStart.Count; i++)
{
// Start service listOfServicesToStart[i]
progressBar.Value = i;
Application.DoEvents();
}
如果你打算想象服務的啓動過程:我想你不能很好地做到這一點。什麼是服務管理單元在Windows似乎做的是:
- 它試圖啓動/重新啓動/停止該服務
- 它調用
ServiceController.WaitForStatus
有1秒超時,看服務是否已經進入相應的狀態 - 增加1進度條值,直到超時被檢測去2.(你需要找幾秒鐘內合理數量的等待服務進入理想狀態)
這似乎是唯一的辦法。
相關問題
- 1. 進度條未顯示進度條
- 2. 進度條與UTC時間
- 3. 實現引導進度條來通知用戶課程進度
- 4. r和系統時間的進度條
- 5. 估計進度條的循環時間
- 6. AVPlayer的時間軸進度條
- 7. 使用Theme.NoTitleBar時未顯示進度條
- 8. 進度條未及時更新
- 9. 進度條並未停止
- 10. WPF進度條未顯示
- 11. 只用時間戳創建進度條?
- 12. WPF - 根據時間動畫進度條
- 13. 長時間運行的進程在WCF中的進度通知 - 如何?
- 14. 下載時的進度條
- 15. 未知運行時間剩餘的配置進程
- 16. javafx:進度條顯示進程的進度?
- 17. 減慢進度條進度
- 18. 設置進度,進度條
- 19. 進度條更新進度
- 20. 帶進度條的長時間運行過程示例PlayFramework 2
- 21. 進度條爲每個進程
- 22. JSF進度條 - 服務器端進程
- 23. 以編程方式創建時未顯示Android進度條
- 24. 如何拆分多進程同時發生的進度條
- 25. WPF實時進度條
- 26. jQuery倒計時進度條
- 27. 進度條和計時器
- 28. 進度條不知道任務數
- 29. 如何在時間進度條中放置時間顯示框
- 30. 進度條寬度
當我使用此代碼,我得到 – Gokul 2011-06-15 12:45:56
從工具箱BackgroundWorker組件到窗體「backgroundWorker1不會在當前的背景下存在」。在屬性窗口中設置事件處理程序,閃電圖標。 – 2011-06-15 12:52:22
非常感謝回覆,進程欄即將到來,但是兩者都沒有開始。我用編碼 – Gokul 2011-06-15 13:01:54