2016-12-02 60 views
-1

我正在使用VS 2015 winform後臺工作人員執行一些任務。DoWork()完成後將變量傳遞給RunWorkerCompleted()

我有DoWork()方法,它使用List<string> myList,它刪除列表中的每個條目,一旦某個過程完成。我的目標是讓用戶知道myList中的哪些條目未被處理(因爲它在每個進程後刪除了一個條目,最後剩下的就是未處理的條目)。爲此,我打算將myList變量傳遞給RunWorkerCompleted(),但我不僅不知道如何做到這一點,我甚至不確定這是否是最好的方法。

有沒有更好的方法讓用戶知道myList中的哪些條目沒有被處理,如果沒有,我將如何將DoWork()中的變量傳遞給RunWorkerCompleted()?

當前RunWorkerCompleted()方法:

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    if(e.Error != null) 
    { 
     MessageBox.Show(e.Error.ToString()); 
    } 
    else 
    { 
     MessageBox.Show("Done!"); 
    } 
} 

基本上,我想在MessageBox顯示,當它完成運行任務

+0

任何理由不使用異步/等待而不是後臺工作,因爲這是推薦的方法? –

+0

我是一個初學者用戶,所以我不完全知道其中的差異,但我認爲異步是基於Web的應用程序。 Mine is offline winform(like no network connection,not using server) – djskj189

+0

@ djskj189對於任何處理異步操作的應用程序,「async」都是一個有用的工具。如果你有一個異步操作,你可以使用它。 – Servy

回答

3

條目不處理您可以使用的RunWorkerCompletedEventArgs

結果

請參閱this

對於某些不想閱讀的人,請使用此

private void bgw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    //Do your work 
    e.Result = mylist; 
} 

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    if(e.Error != null) 
    { 
     MessageBox.Show(e.Error.ToString()); 
    } 
    else 
    { 
     ShowResult(e.Result as List<string>); 
    } 
} 
+0

請發佈代碼示例。鏈接死亡,但人們仍然會來這裏尋求答案。 – Archer

+0

它如何知道哪個「結果」是myList變量?它也使用其他變量,它不像它有一個返回類型 – djskj189

+0

@Archer答案不依賴於鏈接。 – Servy