28

以下のコードでは、イベント ハンドラーを定義しており、名前と年齢をグローバルに宣言せずに、そこから年齢と名前の変数にアクセスしたいと考えています。私が言うことができる方法はe.ageありe.nameますか?

void Test(string name, string age)
{
    Process myProcess = new Process(); 
    myProcess.Exited += new EventHandler(myProcess_Exited);
}

private void myProcess_Exited(object sender, System.EventArgs e)
{
  //  I want to access username and age here. ////////////////
    eventHandled = true;
    Console.WriteLine("Process exited");
}
4

2 に答える 2

64

はい、イベント ハンドラーをラムダ式として定義できます。

void Test(string name, string age)
{
  Process myProcess = new Process(); 
  myProcess.Exited += (sender, eventArgs) =>
    {
      // name and age are accessible here!!
      eventHandled = true;
      Console.WriteLine("Process exited");
    }

}
于 2012-09-06T05:29:06.380 に答える
11

ユーザー名と年齢にアクセスする場合は、次のように、カスタム EventArgs (EventArgs クラスから継承) を使用するハンドラーを作成する必要があります。


public class ProcessEventArgs : EventArgs
{
  public string Name { get; internal set; }
  public int  Age { get; internal set; }
  public ProcessEventArgs(string Name, int Age)
  {
    this.Name = Name;
    this.Age = Age;
  }
}

そして代表

public delegate void ProcessHandler (object sender,  ProcessEventArgs data);
于 2012-09-06T05:31:48.983 に答える