将额外参数传递给EventHandler

时间:2009-05-22 04:47:07

标签: c# wcf silverlight

您好我正在尝试迭代我创建的自定义按钮列表。它调用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);                    
}

我想从客户端返回任何内容.GetLevelDescriptionAsync(l.Name);然后将其传递给按钮,例如l.Text =结果;

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

由于

1 个答案:

答案 0 :(得分:1)

您可以考虑两种方法:

  • 使用额外数据声明您自己的委托类型/ event-args类型
  • 在募集类上有公开属性,公开此数据

如果GetLevelDescriptionCompletedEventArgs是你的类型,那么你已经在做第一个 - 所以只需在event-args类型中公开这个值;你可以用匿名方法消费它:

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问题。