收集回调垃圾的问题
Issue with callback garbage collected
我在使用此代码时收到错误 "A callback was made on a garbage collected delegate of type",但我似乎找不到解决方案。
<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
尝试将 mHandler
转换为 class 成员(例如私有字段),因为目前它的作用域是 OnLoadit
方法,以便在执行后 mHandler
可以目前通过 GC 收集。
我在使用此代码时收到错误 "A callback was made on a garbage collected delegate of type",但我似乎找不到解决方案。
<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
尝试将 mHandler
转换为 class 成员(例如私有字段),因为目前它的作用域是 OnLoadit
方法,以便在执行后 mHandler
可以目前通过 GC 收集。