C# 将额外参数传递给EventHandler

C# 将额外参数传递给EventHandler,c#,wcf,silverlight,C#,Wcf,Silverlight,嗨,我正在尝试迭代我创建的自定义按钮列表。它会调用WCF服务,从数据库中获取一些信息 foreach (LevelButton l in ls) { WayFinderDBService.WayFinderDBServiceClient client = new SilverlightNav.WayFinderDBService.WayFinderDBServiceClient(); client.GetLevelDescriptionCompleted += new

嗨,我正在尝试迭代我创建的自定义按钮列表。它会调用WCF服务,从数据库中获取一些信息

foreach (LevelButton l in ls)
{
    WayFinderDBService.WayFinderDBServiceClient client = new    SilverlightNav.WayFinderDBService.WayFinderDBServiceClient();
    client.GetLevelDescriptionCompleted += new    EventHandler<SilverlightNav.WayFinderDBService.GetLevelDescriptionCompletedEventArgs>(client_GetLevelDescriptionCompleted);
    client.GetLevelDescriptionAsync(l.Name);                    
}
foreach(ls中的level按钮l)
{
WayFinderDBService.WayFinderDBServiceClient=new SilverlightNav.WayFinderDBService.WayFinderDBServiceClient();
client.GetLevelDescriptionCompleted+=新事件处理程序(client\u GetLevelDescriptionCompleted);
client.GetLevelDescriptionAsync(l.Name);
}
我想获取从client.GetLevelDescriptionAsync(l.Name)返回的任何内容;然后将其传递给按钮,例如l.Text=结果

我的问题是将对按钮的引用作为额外参数传递给EventHandler。实现我想做的事情的正确方法是什么


谢谢

您可以考虑两种方法:

  • 用额外的数据声明您自己的委托类型/事件参数类型
  • 在公开此数据的提升类上具有公共属性
如果
GetLevelDescriptionCompletedEventArgs
是您的类型,那么您已经在做第一个了,所以只需在EventArgs类型中公开这个值;您可以通过匿名方法使用它:

foreach (LevelButton l in ls)
{
    LevelButton tmp = l;
    var client=new SilverlightNav.WayFinderDBService.WayFinderDBServiceClient();
    client.GetLevelDescriptionCompleted += delegate (object sender, GetLevelDescriptionCompletedEventArgs args) {
       tmp.Text = args.SomeProperty; // **must** be tmp.Text, not l.Text
    }
    client.GetLevelDescriptionAsync(tmp.Name); // or l.Name; same here
}

但是有一个问题-注意上面的
tmp
;这是臭名昭著的《foreach/
capture
问题。

为我追求的伴侣干杯