在DispatcherTimer EventHandler中添加其他字符串参数

Sha*_*had 2 c# wpf dispatchertimer

如何在Dispatchertimer Eventhandler中添加额外的字符串参数?

我想实现这样的事情:

string ObjectName = "SomeObjectName";
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick(ObjectName));
Run Code Online (Sandbox Code Playgroud)

功能:

private void dispatcherTimer_Tick(object sender, EventArgs e, string ObjectName)
{
    [...]
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

编辑:

我的目的是为移动物体添加一些动画.我的画布上有很少的物体.我可以通过鼠标点击在画布上移动这些对象,我想为这个动作添加动画.

Hei*_*nzi 8

您可以使用闭包:

... 
{    
    string objectName = "SomeObjectName";
    var dispatcherTimer = new DispatcherTimer();

    dispatcherTimer.Tick += (sender, e) => { myTick(sender, e, objectName); };
}

private void myTick(object sender, EventArgs e, string objectName)
{
    [...]
}
Run Code Online (Sandbox Code Playgroud)

但请注意,捕获变量 objectName,而不是它的当前值.这意味着如果你这样做:

... 
{    
    string objectName = "SomeObjectName";
    var dispatcherTimer = new DispatcherTimer();

    dispatcherTimer.Tick += (sender, e) => { myTick(sender, e, objectName); };
    objectName = "SomeOtherObjectName";
}
Run Code Online (Sandbox Code Playgroud)

myTick将被调用SomeOtherObjectName,乍一看可能是违反直觉的.这样做的原因是,在引擎盖下,objectName创建了一个带有字段的单独对象实例- 非常类似于Chris的解决方案明确做的事情.