在Dispatchertimer.Tick事件中发送一个额外的参数

ahm*_*d05 7 c# wpf dispatchertimer

我的问题是如何在Dispatchertimer中发送一些参数.这里的事件是代码:我想要的是在dispatcheTimer_Tick上接收一个整数值

    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);

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

    }
Run Code Online (Sandbox Code Playgroud)

我想做的就是这样的

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

    }
Run Code Online (Sandbox Code Playgroud)

如何从调用点发送值?

Ser*_*rvy 7

虽然有很多方法,但我发现在执行此操作时使用匿名方法关闭变量最方便:

dispatcherTimer.Tick += (s, args) => myControl.Text = DateTime.Now.Second.ToString();
Run Code Online (Sandbox Code Playgroud)

如果你有一些线条,你也可以做更多的事情:

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

如果你不仅仅有一些行,那么你可能仍然需要另一种方法,但是你可以使用lambda来调用该方法:

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

public void myRealMethod(Control someControl, int value)
{
    someControl.Text = value;
}
Run Code Online (Sandbox Code Playgroud)

这对于在不需要时忽略事件处理程序委托的参数都很方便(我几乎从不使用sender,如果我需要它,我自己传递实际对象,以便它不会被转换为object第一个.)以及添加额外的局部变量.


Aus*_*nen 0

如果您知道a在附加事件处理程序时,您可以执行以下操作:

int a = 0;
dispatcherTimer.Tick += (sender, e) => 
    {
       /* a is available here */
    };
Run Code Online (Sandbox Code Playgroud)