Timer-Konstruktor (TimerCallback, Object, Int32, Int32)
Initialisiert eine neue Instanz der Timer-Klasse unter Verwendung einer 32-Bit-Ganzzahl mit Vorzeichen zum Angeben des Zeitintervalls.
Namespace: System.Threading
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Public Sub New ( _
callback As TimerCallback, _
state As Object, _
dueTime As Integer, _
period As Integer _
)
'Usage
Dim callback As TimerCallback
Dim state As Object
Dim dueTime As Integer
Dim period As Integer
Dim instance As New Timer(callback, state, dueTime, period)
public Timer (
TimerCallback callback,
Object state,
int dueTime,
int period
)
public:
Timer (
TimerCallback^ callback,
Object^ state,
int dueTime,
int period
)
public Timer (
TimerCallback callback,
Object state,
int dueTime,
int period
)
public function Timer (
callback : TimerCallback,
state : Object,
dueTime : int,
period : int
)
Parameter
- callback
Ein TimerCallback-Delegat, der die auszuführende Methode darstellt.
- state
Ein Objekt, das die von der Rückrufmethode zu verwendenden Informationen enthält, oder NULL (Nothing in Visual Basic).
- dueTime
Die in Millisekunden angegebene Zeitspanne, die gewartet werden soll, bis callback aufgerufen wird. Geben Sie Timeout.Infinite an, um das Starten des Zeitgebers zu verhindern. Geben Sie 0 (null) an, um den Zeitgeber sofort zu starten.
- period
Das in Millisekunden angegebene Zeitintervall zwischen den Aufrufen von callback. Geben Sie Timeout.Infinite an, um periodisches Signalisieren zu deaktivieren.
Ausnahmen
Ausnahmetyp | Bedingung |
---|---|
Der dueTime-Parameter oder der period-Parameter ist negativ und ungleich Infinite. |
|
Der callback-Parameter ist NULL (Nothing in Visual Basic). |
Hinweise
Der vom callback-Parameter angegebene Delegat wird einmal nach dem Ablauf von dueTime und anschließend bei jedem Ablauf des period-Zeitintervalls aufgerufen.
Hinweis
Benutzer von Visual Basic können den TimerCallback-Konstruktor auslassen und stattdessen beim Angeben der Rückrufmethode den AddressOf-Operator verwenden. Visual Basic ruft automatisch den richtigen Delegatkonstruktor auf.
Wenn dueTime 0 (null) ist, wird callback sofort aufgerufen. Wenn dueTime den Wert Timeout.Infinite hat, wird callback nicht aufgerufen. Der Zeitgeber ist deaktiviert, er kann jedoch durch das Aufrufen der Change-Methode erneut aktiviert werden.
Wenn period 0 (null) oder Infinite ist und dueTime nicht Infinite ist, wird callback einmal aufgerufen. Das periodische Verhalten des Zeitgebers ist deaktiviert, kann aber mithilfe der Change-Methode erneut aktiviert werden.
Die für callback angegebene Methode sollte eine Wiedereintrittsmethode sein, da sie für ThreadPool-Threads aufgerufen wird. Die Methode kann gleichzeitig für zwei Threadpoolthreads ausgeführt werden, wenn das Zeitgeberintervall unter der für die Ausführung der Methode erforderlichen Zeit liegt oder alle Threadpoolthreads verwendet werden und die Methode mehrfach in die Warteschlange gestellt wird.
Beispiel
Das folgende Codebeispiel veranschaulicht das Erstellen eines TimerCallback-Delegaten und das Initialisieren einer neuen Instanz der Timer-Klasse.
Imports Microsoft.VisualBasic
Imports System
Imports System.Threading
Public Class TimerExample
<MTAThread> _
Shared Sub Main()
Dim autoEvent As New AutoResetEvent(False)
Dim statusChecker As New StatusChecker(10)
' Create the delegate that invokes methods for the timer.
Dim timerDelegate As TimerCallback = _
AddressOf statusChecker.CheckStatus
' Create a timer that signals the delegate to invoke
' CheckStatus after one second, and every 1/4 second
' thereafter.
Console.WriteLine("{0} Creating timer." & vbCrLf, _
DateTime.Now.ToString("h:mm:ss.fff"))
Dim stateTimer As Timer = _
New Timer(timerDelegate, autoEvent, 1000, 250)
' When autoEvent signals, change the period to every
' 1/2 second.
autoEvent.WaitOne(5000, False)
stateTimer.Change(0, 500)
Console.WriteLine(vbCrLf & "Changing period." & vbCrLf)
' When autoEvent signals the second time, dispose of
' the timer.
autoEvent.WaitOne(5000, False)
stateTimer.Dispose()
Console.WriteLine(vbCrLf & "Destroying timer.")
End Sub
End Class
Public Class StatusChecker
Dim invokeCount, maxCount As Integer
Sub New(count As Integer)
invokeCount = 0
maxCount = count
End Sub
' This method is called by the timer delegate.
Sub CheckStatus(stateInfo As Object)
Dim autoEvent As AutoResetEvent = _
DirectCast(stateInfo, AutoResetEvent)
invokeCount += 1
Console.WriteLine("{0} Checking status {1,2}.", _
DateTime.Now.ToString("h:mm:ss.fff"), _
invokeCount.ToString())
If invokeCount = maxCount Then
' Reset the counter and signal to stop the timer.
invokeCount = 0
autoEvent.Set()
End If
End Sub
End Class
using System;
using System.Threading;
class TimerExample
{
static void Main()
{
AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecker = new StatusChecker(10);
// Create the delegate that invokes methods for the timer.
TimerCallback timerDelegate =
new TimerCallback(statusChecker.CheckStatus);
// Create a timer that signals the delegate to invoke
// CheckStatus after one second, and every 1/4 second
// thereafter.
Console.WriteLine("{0} Creating timer.\n",
DateTime.Now.ToString("h:mm:ss.fff"));
Timer stateTimer =
new Timer(timerDelegate, autoEvent, 1000, 250);
// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(0, 500);
Console.WriteLine("\nChanging period.\n");
// When autoEvent signals the second time, dispose of
// the timer.
autoEvent.WaitOne(5000, false);
stateTimer.Dispose();
Console.WriteLine("\nDestroying timer.");
}
}
class StatusChecker
{
int invokeCount, maxCount;
public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
}
// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
Console.WriteLine("{0} Checking status {1,2}.",
DateTime.Now.ToString("h:mm:ss.fff"),
(++invokeCount).ToString());
if(invokeCount == maxCount)
{
// Reset the counter and signal Main.
invokeCount = 0;
autoEvent.Set();
}
}
}
using namespace System;
using namespace System::Threading;
ref class StatusChecker
{
private:
int invokeCount;
int maxCount;
public:
StatusChecker( int count )
: invokeCount( 0 ), maxCount( count )
{}
// This method is called by the timer delegate.
void CheckStatus( Object^ stateInfo )
{
AutoResetEvent^ autoEvent = dynamic_cast<AutoResetEvent^>(stateInfo);
Console::WriteLine( "{0} Checking status {1,2}.", DateTime::Now.ToString( "h:mm:ss.fff" ), (++invokeCount).ToString() );
if ( invokeCount == maxCount )
{
// Reset the counter and signal main.
invokeCount = 0;
autoEvent->Set();
}
}
};
int main()
{
AutoResetEvent^ autoEvent = gcnew AutoResetEvent( false );
StatusChecker^ statusChecker = gcnew StatusChecker( 10 );
// Create the delegate that invokes methods for the timer.
TimerCallback^ timerDelegate = gcnew TimerCallback( statusChecker, &StatusChecker::CheckStatus );
// Create a timer that signals the delegate to invoke CheckStatus
// after one second, and every 1/4 second thereafter.
Console::WriteLine( "{0} Creating timer.\n", DateTime::Now.ToString( "h:mm:ss.fff" ) );
Timer^ stateTimer = gcnew Timer( timerDelegate,autoEvent,1000,250 );
// When autoEvent signals, change the period to every 1/2 second.
autoEvent->WaitOne( 5000, false );
stateTimer->Change( 0, 500 );
Console::WriteLine( "\nChanging period.\n" );
// When autoEvent signals the second time, dispose of the timer.
autoEvent->WaitOne( 5000, false );
stateTimer->~Timer();
Console::WriteLine( "\nDestroying timer." );
}
import System.*;
import System.Threading.*;
import System.Threading.Thread;
class TimerExample
{
public static void main(String[] args)
{
AutoResetEvent autoEvent = new AutoResetEvent(false);
StatusChecker statusChecker = new StatusChecker(10);
// Create the delegate that invokes methods for the timer.
TimerCallback timerDelegate = new TimerCallback(
statusChecker.CheckStatus);
// Create a timer that signals the delegate to invoke
// CheckStatus after one second, and every 1/4 second
// thereafter.
Console.WriteLine("{0} Creating timer.\n",
System.DateTime.get_Now().ToString("h:mm:ss.fff"));
Timer stateTimer = new Timer(timerDelegate, autoEvent, 1000, 250);
// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(0, 500);
Console.WriteLine("\nChanging period.\n");
// When autoEvent signals the second time, dispose of
// the timer.
autoEvent.WaitOne(5000, false);
stateTimer.Dispose();
Console.WriteLine("\nDestroying timer.");
} //main
} //TimerExample
class StatusChecker
{
private int invokeCount, maxCount;
public StatusChecker(int count)
{
invokeCount = 0;
maxCount = count;
} //StatusChecker
// This method is called by the timer delegate.
public void CheckStatus(Object stateInfo)
{
AutoResetEvent autoEvent = ((AutoResetEvent)(stateInfo));
Console.WriteLine("{0} Checking status {1,2}.",
System.DateTime.get_Now().ToString("h:mm:ss.fff"),
String.valueOf(++invokeCount));
if (invokeCount == maxCount) {
// Reset the counter and signal Main.
invokeCount = 0;
autoEvent.Set();
}
} //CheckStatus
} //StatusChecker
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0
.NET Compact Framework
Unterstützt in: 2.0, 1.0
Siehe auch
Referenz
Timer-Klasse
Timer-Member
System.Threading-Namespace