[DllImport("user32.dll", ExactSpelling=true)]
static extern IntPtr SetTimer(IntPtr hWnd, IntPtr nIDEvent, uint uElapse, TimerProc lpTimerFunc);
delegate void TimerProc(IntPtr hWnd, uint uMsg, IntPtr nIDEvent, uint dwTime);
// or alternatively
[DllImport("user32.dll", ExactSpelling=true)]
static extern IntPtr SetTimer(IntPtr hWnd, IntPtr nIDEvent, uint uElapse, IntPtr lpTimerFunc);
Public Shared Function SetTimer _
(ByVal hWnd As IntPtr, ByVal nIDEvent As IntPtr, ByVal uElapse As UInteger, ByVal lpTimerFunc As TimerProc) As IntPtr
End Function
None.
None.
Use the version that takes an IntPtr as last parameter and pass it IntPtr.Zero if you are going to handle the WM_TIMER message in your own override of WndProc.
Use the version that takes a delegate as last parameter if you don't explicitly handle the WM_TIMER message or if you don't override WndProc. In that case DefWndProc will invoke your callback when the time-out value elapses.
When using the version that takes a delegate make sure that the delegate is kept alive, i.e. there must be a managed reference to the delegate. Typically this means that after creating the delegate and before passing it to the SetTimer method you should asign it to some private field.
(The native method is actually prototyped to take an unsigned event ID, but because unsigned types are not CLS compliant, declaring it as signed makes it somewhat easier to work with.)
Best of luck.
Please add some!
System.Windows.Forms.Timer