将一个System.Action分配给一个BackgroundWorker

问题描述:

我已经写了一小段代码来将Action分配给BackGroundWorker作为Delegate。
将一个System.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 
} 

为了使长话短说,我很奇怪,为什么在我火与RunWorkerAsync呼叫的工人从来没有进入方法MY_Delegate
也许我的“=>”我的assignement语法很糟糕。
反正,我欢迎任何有效的方法来完成这项工作

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

分配的doWork到args.Result不会调用DoWork的方法。

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

+0

谢谢!我一直在弄这个bug一个小时:-)这是一个奇特的语法,我不习惯它。我尝试修改一个基于模板的代码:'args.Result =(K)do​​Work((T)args.Argument);'实际上'args.Result = doWork();'可以工作,但在这种情况下,一个void委托,所以这里没有用处。再次感谢 ! – 2011-12-29 10:35:02

+0

关于旁注,如果我真的明白了,我不会问(愚蠢的)问题:-P更严重:这不是我的“真实”代码,我只是试着写一个最小样本来重现我所面临的问题。我试图从一个漂亮的博客条目中为代码添加一个“void”委托功能:http://pooyakhamooshi.blogspot.com/2009/11/create-thread-safe-queued.html – 2011-12-29 15:56:21