将System.Action分配给BackgroundWorker

时间:2011-12-29 10:22:57

标签: c# .net

我写了一小段代码,将Action作为代表分配给BackGroundWorker

public BackgroundWorker GetBackgroundWorker(System.Action doWork)
{
   BackgroundWorker bwk= new BackgroundWorker();
   bwk.DoWork += (sender, args) => { args.Result = doWork; };
   return bwk;
}

BackgroundWorker wk = GetBackgroundWorker(MY_Delegate);
wk.RunWorkerAsync();

public void MY_Delegate()
{
  //DO Stuff
}

总而言之,我想知道为什么在我通过MY_Delegate电话解雇员工之后,从未输入方法RunWorkerAsync
也许我的约束语法围绕“=>”吮吸。
ANyway,我欢迎任何有效的方式来完成这项工作

1 个答案:

答案 0 :(得分:5)

public BackgroundWorker GetBackgroundWorker(System.Action doWork)
{
   BackgroundWorker bwk= new BackgroundWorker();
   bwk.DoWork += (sender, args) => { doWork(); };
   return bw;
}

将doWork分配给args.Result不会调用DoWork方法。

作为旁注:方法和变量的命名表明您不完全理解委托,事件和lambda表达式。