收集回调垃圾的问题

时间:2016-08-09 03:50:09

标签: .net vb.net timer pinvoke

我收到错误"在类型"的垃圾收集委托上进行了回调。使用此代码,但我似乎无法找到解决方案。

<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

1 个答案:

答案 0 :(得分:1)

尝试将mHandler转换为类成员(例如私有字段),因为它当前限定为OnLoadit方法,以便在执行mHandler后可以通过GC收集时刻。