我正在编写需要每10毫秒左右运行一些代码的C#/ WPF应用程序(我知道Windows不是实时的)。由于我在Windows 7上运行,系统时间约为15毫秒,这限制了我使用内置的.NET计时器类型。
我实现了用户mike-z(High resolution timer in C#)详细介绍的多媒体计时器,但似乎遇到了相同的问题。不幸的是,我不熟悉C#以遵循他提出的解决方案:
自己创建回调委托并使用GCHandle.Alloc()
我对C#或托管代码不是很有经验,但据我所知,问题与这一行有关:
timerId = NativeMethods.TimeSetEvent((uint)Interval, (uint)Resolution, TimerCallback, ref userCtx, 1);
TimerCallback()函数被垃圾收集 - 是吗?
所以听起来我需要在main / managed函数中创建对此回调的引用,然后将其传递给定时器(可能作为Start()
函数的输入参数)?
但我不确定在这种情况下我需要使用GCHandle.Alloc()
。