2
我收到一个错误“回调是使用此代码对垃圾收集的代理类型进行的”,但我似乎找不到解决方案。回收垃圾回收问题
<DllImport("winmm.dll")>
Private Shared Function timeSetEvent(delay As Integer, resolution As Integer, handler As TimerEventHandler, user As IntPtr, eventType As Integer) As Integer
End Function
<DllImport("winmm.dll")>
Private Shared Function timeBeginPeriod(millisecond As Integer) As Integer
End Function
Private Sub OnLoadit()
timeBeginPeriod(1)
Dim mHandler As New TimerEventHandler(AddressOf TimerCallback)
Dim mTimerId As Integer = timeSetEvent(4, 0, mHandler, IntPtr.Zero, 1)
End Sub
Private Delegate Sub TimerEventHandler(id As Integer, msg As Integer, user As IntPtr, dw1 As Integer, dw2 As Integer)
Private Sub TimerCallback(id As Integer, msg As Integer, user As IntPtr, dw1 As Integer, dw2 As Integer)
'my function code here
End Sub
谢谢,如果这可以安全地运行,作为每3毫秒执行一个函数的定时器的替代方案? – PaulWill
嗯,我会处理尽可能长的托管代码,但如果.NET的定时器的解决方案不符合您的需求,这确实会继续与它。然而有一点需要注意的是,你应该处理清理工作,即实现IDisposable,这样当你的整个对象超出范围时,它将摆脱创建的计时器,否则会发生相同的错误 – DAXaholic