Timer Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Tillhandahåller en mekanism för att köra en metod på en trådpoolstråd med angivna intervall. Det går inte att ärva den här klassen.
public ref class Timer sealed : IDisposable
public ref class Timer sealed : MarshalByRefObject, System::Threading::ITimer
public ref class Timer sealed : MarshalByRefObject, IAsyncDisposable, IDisposable
public ref class Timer sealed : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : IDisposable
public sealed class Timer : MarshalByRefObject, System.Threading.ITimer
public sealed class Timer : MarshalByRefObject, IAsyncDisposable, IDisposable
public sealed class Timer : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : MarshalByRefObject, IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type Timer = class
interface IDisposable
type Timer = class
inherit MarshalByRefObject
interface IAsyncDisposable
interface IDisposable
interface ITimer
type Timer = class
inherit MarshalByRefObject
interface IAsyncDisposable
interface IDisposable
type Timer = class
inherit MarshalByRefObject
interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type Timer = class
inherit MarshalByRefObject
interface IDisposable
Public NotInheritable Class Timer
Implements IDisposable
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements ITimer
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements IAsyncDisposable, IDisposable
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements IDisposable
- Arv
-
Timer
- Arv
- Attribut
- Implementeringar
Exempel
I följande exempel definieras en StatusChecker klass som innehåller en CheckStatus metod vars signatur är samma som ombudet TimerCallback . Argumentet state för CheckStatus metoden är ett AutoResetEvent objekt som används för att synkronisera programtråden och trådpoolstråden som kör återanropsdelegaten. Klassen StatusChecker innehåller också två tillståndsvariabler:
invokeCount
Anger hur många gånger återanropsmetoden har anropats.
maxCount
Avgör det maximala antalet gånger som återanropsmetoden ska anropas.
Programtråden skapar timern, som väntar en sekund och sedan kör återanropsmetoden CheckStatus var 250:e millisekunder. Programtråden blockerar sedan tills objektet AutoResetEvent signaleras.
CheckStatus När återanropsmetoden körs gånger anropas maxCountAutoResetEvent.Set metoden för att ange tillståndet för AutoResetEvent objektet till signalerat. Första gången detta inträffar anropar programtråden Change(Int32, Int32) metoden så att återanropsmetoden nu körs varje halv sekund. Det blockerar återigen tills objektet AutoResetEvent signaleras. När detta inträffar förstörs timern genom att anropa dess Dispose metod och programmet avslutas.
using System;
using System.Threading;
class TimerExample
{
static void Main()
{
// Create an AutoResetEvent to signal the timeout threshold in the
// timer callback has been reached.
var autoEvent = new AutoResetEvent(false);
var statusChecker = new StatusChecker(10);
// Create a timer that invokes CheckStatus after one second,
// and every 1/4 second thereafter.
Console.WriteLine("{0:h:mm:ss.fff} Creating timer.\n",
DateTime.Now);
var stateTimer = new Timer(statusChecker.CheckStatus,
autoEvent, 1000, 250);
// When autoEvent signals, change the period to every half second.
autoEvent.WaitOne();
stateTimer.Change(0, 500);
Console.WriteLine("\nChanging period to .5 seconds.\n");
// When autoEvent signals the second time, dispose of the timer.
autoEvent.WaitOne();
stateTimer.Dispose();
Console.WriteLine("\nDestroying timer.");
}
}
class StatusChecker
{
private int invokeCount;
private int 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 the waiting thread.
invokeCount = 0;
autoEvent.Set();
}
}
}
// The example displays output like the following:
// 11:59:54.202 Creating timer.
//
// 11:59:55.217 Checking status 1.
// 11:59:55.466 Checking status 2.
// 11:59:55.716 Checking status 3.
// 11:59:55.968 Checking status 4.
// 11:59:56.218 Checking status 5.
// 11:59:56.470 Checking status 6.
// 11:59:56.722 Checking status 7.
// 11:59:56.972 Checking status 8.
// 11:59:57.223 Checking status 9.
// 11:59:57.473 Checking status 10.
//
// Changing period to .5 seconds.
//
// 11:59:57.474 Checking status 1.
// 11:59:57.976 Checking status 2.
// 11:59:58.476 Checking status 3.
// 11:59:58.977 Checking status 4.
// 11:59:59.477 Checking status 5.
// 11:59:59.977 Checking status 6.
// 12:00:00.478 Checking status 7.
// 12:00:00.980 Checking status 8.
// 12:00:01.481 Checking status 9.
// 12:00:01.981 Checking status 10.
//
// Destroying timer.
Imports System.Threading
Public Module Example
Public Sub Main()
' Use an AutoResetEvent to signal the timeout threshold in the
' timer callback has been reached.
Dim autoEvent As New AutoResetEvent(False)
Dim statusChecker As New StatusChecker(10)
' Create a timer that invokes CheckStatus after one second,
' and every 1/4 second thereafter.
Console.WriteLine("{0:h:mm:ss.fff} Creating timer." & vbCrLf,
DateTime.Now)
Dim stateTimer As New Timer(AddressOf statusChecker.CheckStatus,
autoEvent, 1000, 250)
' When autoEvent signals, change the period to every half second.
autoEvent.WaitOne()
stateTimer.Change(0, 500)
Console.WriteLine(vbCrLf & "Changing period to .5 seconds." & vbCrLf)
' When autoEvent signals the second time, dispose of the timer.
autoEvent.WaitOne()
stateTimer.Dispose()
Console.WriteLine(vbCrLf & "Destroying timer.")
End Sub
End Module
Public Class StatusChecker
Dim invokeCount, maxCount As Integer
Sub New(count As Integer)
invokeCount = 0
maxCount = count
End Sub
' The timer callback method.
Sub CheckStatus(stateInfo As Object)
Dim autoEvent As AutoResetEvent = DirectCast(stateInfo, AutoResetEvent)
invokeCount += 1
Console.WriteLine("{0:h:mm:ss.fff} Checking status {1,2}.",
DateTime.Now, invokeCount)
If invokeCount = maxCount Then
' Reset the counter and signal the waiting thread.
invokeCount = 0
autoEvent.Set()
End If
End Sub
End Class
' The example displays output like the following:
' 11:59:54.202 Creating timer.
'
' 11:59:55.217 Checking status 1.
' 11:59:55.466 Checking status 2.
' 11:59:55.716 Checking status 3.
' 11:59:55.968 Checking status 4.
' 11:59:56.218 Checking status 5.
' 11:59:56.470 Checking status 6.
' 11:59:56.722 Checking status 7.
' 11:59:56.972 Checking status 8.
' 11:59:57.223 Checking status 9.
' 11:59:57.473 Checking status 10.
'
' Changing period to .5 seconds.
'
' 11:59:57.474 Checking status 1.
' 11:59:57.976 Checking status 2.
' 11:59:58.476 Checking status 3.
' 11:59:58.977 Checking status 4.
' 11:59:59.477 Checking status 5.
' 11:59:59.977 Checking status 6.
' 12:00:00.478 Checking status 7.
' 12:00:00.980 Checking status 8.
' 12:00:01.481 Checking status 9.
' 12:00:01.981 Checking status 10.
'
' Destroying timer.
Kommentarer
Använd ett TimerCallback ombud för att ange den metod som du vill Timer köra. Ombudets TimerCallback signatur är:
void TimerCallback(Object state)
Sub TimerCallback(state As Object)
Timerdelegaten anges när timern är konstruerad och inte kan ändras. Metoden körs inte på tråden som skapade timern. den körs på en ThreadPool tråd som tillhandahålls av systemet.
Tip
.NET innehåller flera timerklasser, som var och en erbjuder olika funktioner:
- System.Timers.Timer, som utlöser en händelse och kör koden i en eller flera händelsemottagare med jämna mellanrum. Klassen är avsedd att användas som en serverbaserad komponent eller tjänstkomponent i en flertrådad miljö. det har inget användargränssnitt och visas inte vid körning.
- System.Threading.Timer, som kör en enda motringningsmetod på en trådpoolstråd med jämna mellanrum. Motringningsmetoden definieras när timern instansieras och inte kan ändras. Precis som klassen är den System.Timers.Timer här klassen avsedd att användas som en serverbaserad komponent eller tjänstkomponent i en miljö med flera gränssnitt. Den har inget användargränssnitt och är inte synlig vid körning.
- System.Windows.Forms.Timer, en Windows Forms komponent som utlöser en händelse och kör koden i en eller flera händelsemottagare med jämna mellanrum. Komponenten har inget användargränssnitt och är utformad för användning i en enkeltrådad miljö. den körs på användargränssnittstråden.
- System.Web.UI.Timer (endast .NET Framework), en ASP.NET komponent som utför asynkrona eller synkrona sidinlägg med jämna mellanrum.
-
System.Windows.Threading.DispatcherTimer, en timer som är integrerad i kön
Dispatcher. Den här timern bearbetas med en angiven prioritet vid ett angivet tidsintervall.
När du skapar en timer kan du ange en tid att vänta innan den första körningen av metoden (förfallen tid) och en tid att vänta mellan efterföljande körningar (period). Klassen Timer har samma upplösning som systemklockan. Det innebär att om perioden är mindre än systemklockans upplösning körs TimerCallback-ombudet med intervall som definieras av systemklockans upplösning, vilket är cirka 15 millisekunder på Windows 7 och Windows 8 system. Du kan ändra förfallen tid och period eller inaktivera timern med hjälp Change av metoden .
Note
Så länge du använder en Timermåste du behålla en referens till den. Som med alla hanterade objekt är en Timer föremål för skräpinsamling när det inte finns några referenser till det. Det faktum att en Timer fortfarande är aktiv hindrar inte att den samlas in.
Note
Systemklockan som används är samma klocka som används av GetTickCount, som inte påverkas av ändringar som gjorts med timeBeginPeriod och timeEndPeriod.
När en timer inte längre behövs använder du Dispose metoden för att frigöra de resurser som finns i timern. Observera att återanrop kan inträffa efter att metodöverbelastningen Dispose() har anropats, eftersom timern köar återanrop för körning av trådpooltrådar. Du kan använda metodöverlagringen Dispose(WaitHandle) för att vänta tills alla återanrop har slutförts.
Motringningsmetoden som körs av timern ska vara reentrant eftersom den anropas på ThreadPool trådar. Motringningen kan köras samtidigt på två trådpoolstrådar om tidsintervallet är mindre än den tid som krävs för att köra återanropet, eller om alla trådpoolstrådar används och återanropet köas flera gånger.
Note
System.Threading.Timer är en enkel, lätt timer som använder motringningsmetoder och hanteras av trådpooltrådar. Det rekommenderas inte för användning med Windows Forms eftersom dess återanrop inte sker i användargränssnittstråden. System.Windows.Forms.Timer är ett bättre val för användning med Windows Forms. För serverbaserade timerfunktioner kan du överväga att använda System.Timers.Timer, som genererar händelser och har ytterligare funktioner.
Konstruktorer
| Name | Description |
|---|---|
| Timer(TimerCallback, Object, Int32, Int32) |
Initierar en ny instans av |
| Timer(TimerCallback, Object, Int64, Int64) |
Initierar en ny instans av klassen med hjälp av |
| Timer(TimerCallback, Object, TimeSpan, TimeSpan) |
Initierar en ny instans av klassen med hjälp |
| Timer(TimerCallback, Object, UInt32, UInt32) |
Initierar en ny instans av |
| Timer(TimerCallback) |
Initierar en ny instans av Timer klassen med en oändlig period och en oändlig förfallotid med det nyligen skapade Timer objektet som tillståndsobjekt. |
Egenskaper
| Name | Description |
|---|---|
| ActiveCount |
Hämtar antalet timers som för närvarande är aktiva. En aktiv timer registreras för att ticka någon gång i framtiden och har ännu inte avbrutits. |
Metoder
| Name | Description |
|---|---|
| Change(Int32, Int32) |
Ändrar starttiden och intervallet mellan metodanrop för en timer med hjälp av 32-bitars signerade heltal för att mäta tidsintervall. |
| Change(Int64, Int64) |
Ändrar starttiden och intervallet mellan metodanrop för en timer med hjälp av 64-bitars signerade heltal för att mäta tidsintervall. |
| Change(TimeSpan, TimeSpan) |
Ändrar starttiden och intervallet mellan metodanrop för en timer med hjälp av TimeSpan värden för att mäta tidsintervall. |
| Change(UInt32, UInt32) |
Ändrar starttiden och intervallet mellan metodanrop för en timer med hjälp av 32-bitars osignerade heltal för att mäta tidsintervall. |
| CreateObjRef(Type) |
Skapar ett objekt som innehåller all relevant information som krävs för att generera en proxy som används för att kommunicera med ett fjärrobjekt. (Ärvd från MarshalByRefObject) |
| Dispose() |
Släpper alla resurser som används av den aktuella instansen av Timer. |
| Dispose(WaitHandle) |
Frigör alla resurser som används av den aktuella instansen av Timer och signaler när timern har tagits bort. |
| DisposeAsync() |
Släpper alla resurser som används av den aktuella instansen av Timer. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| Finalize() |
Tillåter att ett objekt försöker frigöra resurser och utföra andra rensningsåtgärder innan det frigörs av skräpinsamling. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetLifetimeService() |
Föråldrad.
Hämtar det aktuella livslängdstjänstobjektet som styr livslängdsprincipen för den här instansen. (Ärvd från MarshalByRefObject) |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| InitializeLifetimeService() |
Föråldrad.
Hämtar ett tjänstobjekt för livslängd för att styra livslängdsprincipen för den här instansen. (Ärvd från MarshalByRefObject) |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| MemberwiseClone(Boolean) |
Skapar en ytlig kopia av det aktuella MarshalByRefObject objektet. (Ärvd från MarshalByRefObject) |
| ToString() |
Returnerar en sträng som representerar det aktuella objektet. (Ärvd från Object) |
Tilläggsmetoder
| Name | Description |
|---|---|
| ConfigureAwait(IAsyncDisposable, Boolean) |
Konfigurerar hur väntar på de uppgifter som returneras från en asynkron disponibel ska utföras. |
Gäller för
Trådsäkerhet
Den här typen är trådsäker.