Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Initialisiert eine neue Instanz der Timer-Klasse unter Verwendung von TimeSpan-Werten zum Messen von Zeitintervallen.
Namespace: System.Threading
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
Public Sub New ( _
callback As TimerCallback, _
state As Object, _
dueTime As TimeSpan, _
period As TimeSpan _
)
'Usage
Dim callback As TimerCallback
Dim state As Object
Dim dueTime As TimeSpan
Dim period As TimeSpan
Dim instance As New Timer(callback, state, dueTime, period)
public Timer (
TimerCallback callback,
Object state,
TimeSpan dueTime,
TimeSpan period
)
public:
Timer (
TimerCallback^ callback,
Object^ state,
TimeSpan dueTime,
TimeSpan period
)
public Timer (
TimerCallback callback,
Object state,
TimeSpan dueTime,
TimeSpan period
)
public function Timer (
callback : TimerCallback,
state : Object,
dueTime : TimeSpan,
period : TimeSpan
)
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 TimeSpan, die die Zeitspanne darstellt, die gewartet werden soll, bis der callback-Parameter die zugehörigen Methoden aufruft. Geben Sie -1 Millisekunde an, um das Starten des Zeitgebers zu verhindern. Geben Sie 0 (null) an, um den Zeitgeber sofort zu starten.
- period
Das Zeitintervall zwischen Aufrufen der Methoden, auf die durch callback verwiesen wird. Geben Sie -1 Millisekunde an, um periodisches Signalisieren zu deaktivieren.
Ausnahmen
| Ausnahmetyp | Bedingung |
|---|---|
Die Anzahl der Millisekunden im Wert von dueTime oder period ist negativ und ungleich Infinite oder größer als MaxValue. |
|
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 -1 Millisekunde beträgt, wird callback nicht aufgerufen. Der Zeitgeber ist deaktiviert, er kann aber durch das Aufrufen der Change-Methode erneut aktiviert werden.
Wenn period 0 (null) oder -1 Millisekunden beträgt und dueTime positiv 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
Dim delayTime As New TimeSpan(0, 0, 1)
Dim intervalTime As New TimeSpan(0, 0, 0, 0, 250)
' 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, delayTime, intervalTime)
' When autoEvent signals, change the period to every
' 1/2 second.
autoEvent.WaitOne(5000, False)
stateTimer.Change( _
new TimeSpan(0), intervalTime.Add(intervalTime))
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);
TimeSpan delayTime = new TimeSpan(0, 0, 1);
TimeSpan intervalTime = new TimeSpan(0, 0, 0, 0, 250);
// 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, delayTime, intervalTime);
// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(new TimeSpan(0),
intervalTime + intervalTime);
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 );
TimeSpan delayTime = TimeSpan(0,0,1);
TimeSpan intervalTime = TimeSpan(0,0,0,0,250);
// 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,delayTime,intervalTime );
// When autoEvent signals, change the period to every 1/2 second.
autoEvent->WaitOne( 5000, false );
stateTimer->Change( TimeSpan(0), intervalTime + intervalTime );
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);
TimeSpan delayTime = new TimeSpan(0, 0, 1);
TimeSpan intervalTime = new TimeSpan(0, 0, 0, 0, 250);
// 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,
delayTime, intervalTime);
// When autoEvent signals, change the period to every
// 1/2 second.
autoEvent.WaitOne(5000, false);
stateTimer.Change(new TimeSpan(0), intervalTime.Add(intervalTime));
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