2012-05-02 20 views
0

我有一個相當長的運行過程,現在凍結了我的應用程序一段時間。使用backgroundworker來顯示長時間運行的進程仍在工作

如何將此過程包裝在背景工作器中併爲用戶提供狀態。

我知道,理想情況下,流程本身將不得不報告其進展,但我不認爲我可以構建它。並不是我無法在該流程中更改代碼,但我不想更改太多。

如果我可以在後臺工作中啓動此過程,以便我的應用保持響應,我會很高興。現在,我可以做到。但問題是,是否有簡單的方法讓一些進度條做某件事來表明進程仍在運行?

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    StartLongRunningProcess(); 
} 

我的代碼是現在這個樣子以上,我想知道如何包裝過程中以某種方式,我可以更新進度條?或者是否有一種簡單的方法可以在不完全更改代碼的情況下從此過程獲取更多信息?在長時間運行的進程中,有一個修改的行計數器正在運行,但它只在結束時返回一個值。

我知道backgroundworker和它的ReportProgress選項是如何工作的,但問題是這個過程只是運行並且在運行時不提供任何反饋。

+2

你看着BackgroundWorker的,它需要用它來更新進度條什麼的ProgressChanged事件?這根本不是那麼糟糕。 – Servy

+0

你用1和100之間的數字(已完成的百分比)調用它 - 這裏有一個例子:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx –

+1

Henk看到我的問題,我真的沒有數據..這是整個問題。 – Tys

回答

2

如果將WorkerReportsProgress屬性設置爲true,則可以使用ProgressChanged事件。

BackgroundWorker bw = new BackgroundWorker{WorkerReportsProgress = true} 
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged); 

private void bw_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    var percent = e.ProgressPercentage; 
    //update progress bar here 
} 

然後在您的工作中,您可以報告進度。

private void bw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    BackgroundWorker worker = sender as BackgroundWorker;  
    e.Result = StartLongRunningProcess(worker); 
} 

public void StartLongRunningProcess(BackgroundWorker worker) 
{ 
    worker.ReportProgress(percentComplete); 
} 

你可以找到完整的例子here

1

一旦你開始工作,主UI線程然後可以自由地做任何事情。所有你需要做的就是開始顯示你想要的任何動畫,通過定時器更新或者你想要的任何其他機制。只要確保在工作完成時停止/隱藏動畫。

相關問題