2009-05-22 15 views
3

こんにちは私が作成したカスタムボタンのリストを反復しようとしています。それは、DBからいくつかの情報を取得するWCFサービスを呼び出します。EventHandlerに余分なパラメータを渡す

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);      
} 

私はclient.GetLevelDescriptionAsync(l.Name)から返されるものは何でも取ることを希望しています。ボタンにこれを渡すことができます。 l.Text =結果;

私の問題は、ボタンへの参照をEventHandlerの追加パラメータとして渡していることです。私がしたいことを達成する正しい方法は何ですか?

おかげ

答えて

1

あなたは検討するかもしれない二つのアプローチがあります。

  • は、独自のデリゲート型/イベント引数が
  • 余分なデータを入力する宣言公開する調達クラスのパブリックプロパティを持っていますこのデータ

GetLevelDescriptionCompletedEventArgsがあなたのタイプの場合は、すでに最初のことをしているので、 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問題です。

+0

私の後ろのものは、 – Marklar

関連する問題