SetTimer (user32)
Last changed: -217.115.65.17

.
Summary

C# Signature:

[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);

VB Signature:

<DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function SetTimer _
(ByVal hWnd As IntPtr, ByVal nIDEvent As IntPtr, ByVal uElapse As UInteger, ByVal lpTimerFunc As IntPtr) As IntPtr
End Function

// or alternatively

<DllImport("user32.dll", SetLastError:=True)> _
Public Shared Function SetTimer _
(ByVal hWnd As IntPtr, ByVal nIDEvent As IntPtr, ByVal uElapse As UInteger, ByVal lpTimerFunc As TimerProc) As IntPtr
End Function

Public Delegate Sub TimerProc(ByVal hWnd As IntPtr, ByVal uMsg As UInteger, ByVal nIDEvent As IntPtr, ByVal dwTime As UInteger)

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

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.

Sample Code:

Please add some!

Alternative Managed API:

System.Windows.Forms.Timer

Documentation
SetTimer on MSDN