7

私の質問は、Dispatchertimer.Tick イベントでいくつかの引数を送信する方法です。コードは次のとおりです。私が望んでいたのは、dispatcheTimer_Tick で整数値を受け取ることです。

    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);

    private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        //.Text = DateTime.Now.Second.ToString();

    }

私がやりたかったことは、このようなものです

    private void dispatcherTimer_Tick(object sender, EventArgs e,int a)
    {
        //.Text = DateTime.Now.Second.ToString();

    }

呼び出しポイントから値を送信する方法??

4

2 に答える 2

7

いくつかの方法がありますが、匿名メソッドを使用して変数を閉じるのが最も便利だと思います。

dispatcherTimer.Tick += (s, args) => myControl.Text = DateTime.Now.Second.ToString();

少数の行がある場合は、次のようなこともできます。

int number = 5;
dispatcherTimer.Tick += (s, args) => 
{
    string value = someMethod();
    string otherValue = DateTime.Now.Second.ToString()
    myControl.Text = value + otherValue + number;
}

ほんの一握り以上の行がある場合は、おそらく別のメソッドが必要ですが、ラムダを使用してそのメソッドを呼び出すことができます。

int value = 5;
dispatcherTimer.Tick += (s, args) => myRealMethod(someControl, value);

public void myRealMethod(Control someControl, int value)
{
    someControl.Text = value;
}

これは、イベント ハンドラーのデリゲートのパラメーターが不要な場合にそれらを無視する場合 (私は をほとんど使用しません。必要な場合senderは実際のオブジェクトを自分で渡し、object最初にキャストされないようにします) の両方に便利です。ローカル変数。

于 2012-11-06T17:28:57.840 に答える
0

イベント ハンドラーをアタッチする時点でわかっている場合aは、次のようにすることができます。

int a = 0;
dispatcherTimer.Tick += (sender, e) => 
    {
       /* a is available here */
    };
于 2012-11-06T17:28:45.007 に答える