2016-12-02 76 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