当前位置: 首页 > 编程语言 > C#

BackgroundWorker有没有匿名方法?分享

时间:2023-04-10 14:45:51 C#

BackgroundWorker有没有匿名方法?我将使用匿名方法创建BackgroundWorker。我写了下面的代码:BackgroundWorkerbgw=newBackgroundWorker();bgw.DoWork+=newDoWorkEventHandler(()=>{inti=0;foreach(variteminquery2){........}});但是委托'System.ComponentModel.DoWorkEventHandler'不接受'0'参数,我必须将两个对象传递给匿名方法:对象发送者,DoWorkEventArgse你能指导我吗,我该怎么办?谢谢。您只需要向匿名函数添加参数:bgw.DoWork+=(sender,e)=>{...}或者,如果您不关心参数,您可以:bgw.DoWork+=delegate{。..}如果指定了lambda,则必须确保它具有相同数量的参数:bgw.DoWork+=(s,e)=>...;但是如果你不使用参数,你可以使用一个没有参数的匿名委托:bgw.DoWork+=delegate{...};如果你在没有lambda的情况下编写上面的代码会怎样?backgroundWorker1.DoWork+=newDoWorkEventHandler(backgroundWorker1_DoWork);和命名方法:privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){//获取引发此事件的BackgroundWorker。BackgroundWorkerworker=senderasBackgroundresultWorker;//将计算//分配给DoWorkEventArgs//对象的结果属性。这将对//RunWorkerCompleted事件处理程序可用。e.Result=ComputeFibonacci((int)e.Argument,worker,e);但是现在你使用没有绑定变量的lambdas()=>你应该提供两个对象sender和e(它们的类型将在稍后推断)。backgroundWorker1.DoWork+=(sender,e)=>...让我们保持简单Lambda表达式非常方便,可以使代码更短、更易读。但是,入门级程序员可能会发现它有点难以处理。应该遍历三个不同的概念:匿名方法、委托和lambda表达式。详细介绍每一个都超出了这个答案的范围。我希望下面给出的代码示例可以让您快速了解可用的不同方法。类TestBed{BackgroundWorkerbgw=newBackgroundWorker();voidsample(){//方法#1bgw.DoWork+=newDoWorkEventHandler(bgw_DoWork);//DoWorkEventHandler只是一个由聪明的Microsoft人员编写的随时可用的委托//方法#2,使其更短bgw.DoWork+=(s,e)=>{//...};//这称为lambda表达式(见=>符号)//方法#3,如果lambda吓到你bgw.DoWork+=delegate{//...(但你不能在这种方法中使用参数};//approach#4,有一个helper方法来准备后台workerprepareBgw((s,e)=>{//...});//approach#5,helper和一个简单的委托,但没有可能的参数prepareBgw(delegate{//...});//approach#6,helper以及将方法名作为委托传递));}voidbgw_DoWork(objectsender,DoWorkEventArgse){//...}voidprepareBgw(DoWorkEventHandlerdoWork){bgw.DoWork+=doWork;注意,我们在这个例子中使用的是“delegate”而不是“Delegate”(两者是有区别的)以上是C#学习教程:BackgroundWorker有匿名方法吗?分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: