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