Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Timers.Timer调用WPF组件';s法_C#_Wpf_Events_Timer_Invoke - Fatal编程技术网

C# System.Timers.Timer调用WPF组件';s法

C# System.Timers.Timer调用WPF组件';s法,c#,wpf,events,timer,invoke,C#,Wpf,Events,Timer,Invoke,我有一个类,负责经典蛇游戏逻辑的逻辑,它使用System.Timers.Timer。因为完全相同的类用于完全相同项目的Windows窗体版本,所以我不想更改它 如何将WPF窗口的方法连接到设计用于WinForms(ISynchronizeInvoke)的事件?我已经搜索了很长一段时间,以便在不重写逻辑类的情况下实现这一点。您可以使用Dispatcher调用UI线程 private void ThreadingTimerTick(object state)// or whatever your m

我有一个类,负责经典蛇游戏逻辑的逻辑,它使用
System.Timers.Timer
。因为完全相同的类用于完全相同项目的Windows窗体版本,所以我不想更改它


如何将WPF窗口的方法连接到设计用于WinForms(
ISynchronizeInvoke
)的事件?我已经搜索了很长一段时间,以便在不重写逻辑类的情况下实现这一点。

您可以使用
Dispatcher
调用UI线程

private void ThreadingTimerTick(object state)// or whatever your method is.
{
   Dispatcher.Invoke(DispatcherPriority.Background, (Action)delegate()
   {
     // do stuff
   });
}

目前还不清楚您是如何使用ISynchronizeInvoke的。但您可以编写一个实现它的小助手类,并使用Dispatcher实现这四个方法。它使用相同的名称,只是invokererequired是Dispatcher.CheckAccess()。这是我丢失的链接,但可能还不够。我可能需要打开另一个问题,或者改进这个问题……我如何实现IAsyncResult接口以用于此用途?