解决"回调是在垃圾收集代表"使用非托管代码

时间:2016-07-20 15:33:36

标签: c# timer

我正在编写需要每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()

0 个答案:

没有答案