我编写了一段小代码,将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的原因。
也许我在“ =>”周围的分配语法很烂。
不管怎样,我欢迎任何有效的方法来完成这项工作

最佳答案

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


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

附带说明:方法和变量的命名表明您不完全了解委托,事件和lambda表达式。

关于c# - 将System.Action分配给BackgroundWorker,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8666592/

10-13 06:00