Timer Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Mechanizmust biztosít egy metódus adott időközönként történő végrehajtásához egy szálkészlet-szálon. Ez az osztály nem örökölhető.
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
- Öröklődés
-
Timer
- Öröklődés
- Attribútumok
- Megvalósítás
Példák
Az alábbi példa egy olyan osztályt StatusChecker határoz meg, amely olyan metódust CheckStatus tartalmaz, amelynek aláírása megegyezik a TimerCallback meghatalmazottéval. A state metódus argumentuma CheckStatus egy AutoResetEvent objektum, amely az alkalmazásszál és a visszahívási meghatalmazottat végrehajtó szálkészlet-szál szinkronizálására szolgál. Az StatusChecker osztály két állapotváltozót is tartalmaz:
invokeCount
Azt jelzi, hogy a visszahívási metódus hányszor lett meghívva.
maxCount
Meghatározza a visszahívási metódus meghívásának maximális számát.
Az alkalmazásszál létrehozza az időzítőt, amely egy másodpercet vár, majd 250 ezredmásodpercenként végrehajtja a CheckStatus visszahívási módszert. Az alkalmazásszál ezután letiltja az objektum jelzését AutoResetEvent . Amikor a CheckStatus visszahívási maxCount metódus időt hajt végre, meghívja a AutoResetEvent.Set metódust, hogy az objektum állapotát AutoResetEvent jelezve állítsa be. Az első alkalommal, amikor ez történik, az alkalmazásszál meghívja a Change(Int32, Int32) metódust, hogy a visszahívási metódus most fél másodpercenként futjon. Ismét blokkolja az objektum jelzését AutoResetEvent . Ha ez történik, az időzítő a metódus meghívásával Dispose megsemmisül, és az alkalmazás leáll.
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.
Megjegyzések
Meghatalmazott használatával TimerCallback adja meg a végrehajtandó metódust Timer . A meghatalmazott aláírása TimerCallback :
void TimerCallback(Object state)
Sub TimerCallback(state As Object)
Az időzítő delegáltja az időzítő létrehozásakor van megadva, és nem módosítható. A metódus nem fut az időzítőt létrehozó szálon; a rendszer által biztosított szálon ThreadPool hajtja végre.
Tip
.NET több időzítőosztályt is tartalmaz, amelyek mindegyike különböző funkciókat kínál:
- System.Timers.Timer, amely aktivál egy eseményt, és rendszeres időközönként végrehajtja a kódot egy vagy több esemény fogadójában. Az osztály kiszolgálóalapú vagy szolgáltatásösszetevőként használható többszálú környezetben; nincs felhasználói felülete, és futásidőben nem látható.
- System.Threading.Timer, amely rendszeres időközönként hajt végre egyetlen visszahívási metódust egy szálkészlet-szálon. A visszahívási módszer akkor van definiálva, ha az időzítő példányosítva van, és nem módosítható. Az osztályhoz hasonlóan ez az System.Timers.Timer osztály kiszolgáló- vagy szolgáltatásösszetevőként használható többszálú környezetben; nincs felhasználói felülete, és futásidőben nem látható.
- System.Windows.Forms.Timer egy Windows Forms összetevő, amely egy eseményt aktivál, és rendszeres időközönként végrehajtja a kódot egy vagy több esemény fogadójában. Az összetevő nem rendelkezik felhasználói felülettel, és egyszálas környezetben való használatra lett kialakítva; végrehajtja a felhasználói felületi szálon.
- System.Web.UI.Timer (csak .NET Keretrendszer esetén), egy ASP.NET összetevő, amely rendszeres időközönként végez aszinkron vagy szinkron weblap-utómunkákat.
-
System.Windows.Threading.DispatcherTimer, a
Dispatcherüzenetsorba integrált időzítő. Ezt az időzítőt egy megadott prioritással dolgozzuk fel egy megadott időintervallumban.
Időzítő létrehozásakor megadhatja, hogy mennyi ideig kell várni a metódus első végrehajtása előtt (határidő), és hogy mennyi időt kell várni a későbbi végrehajtások (időszak) között. Az Timer osztály felbontása megegyezik a rendszerórával. Ez azt jelenti, hogy ha az időszak kisebb, mint a rendszeróra felbontása, akkor a TimerCallback delegált a rendszeróra felbontása által meghatározott időközönként fog futni, ami körülbelül 15 ezredmásodperc Windows 7 és Windows 8 rendszereken. A metódussal módosíthatja a határidőt és az időszakot, vagy letilthatja az időzítőt Change .
Note
Mindaddig, amíg használ egy Timer, meg kell tartania egy hivatkozást rá. A felügyelt objektumokhoz hasonlóan a szemétgyűjtés is akkor történik, Timer ha nincs rá hivatkozás. Az a tény, hogy egy Timer még aktív, nem akadályozza meg a begyűjtését.
Note
A használt rendszeróra megegyezik a GetTickCount által használt órával, amelyet a timeBeginPeriod és a timeEndPeriod módosításai nem befolyásolnak.
Ha már nincs szükség időzítőre, a Dispose metódussal szabadíthatja fel az időzítő által tárolt erőforrásokat. Vegye figyelembe, hogy a visszahívások a metódus túlterhelésének Dispose() meghívása után fordulhatnak elő, mivel az időzítő üzenetsorok visszahívásokat hajtanak végre a szálkészlet-szálak által. A metódus túlterhelésével Dispose(WaitHandle) megvárhatja, amíg az összes visszahívás befejeződik.
Az időzítő által végrehajtott visszahívási metódusnak újra kell entrantnak lennie, mert a rendszer meghívja a szálakon ThreadPool . A visszahívás egyszerre két szálkészletszálon is végrehajtható, ha az időzítő időköze kisebb, mint a visszahívás végrehajtásához szükséges idő, vagy ha az összes szálkészlet-szál használatban van, és a visszahívás többször is várólistára kerül.
Note
System.Threading.Timer egy egyszerű, egyszerű időzítő, amely visszahívási metódusokat használ, és a szálkészlet szálai szolgálnak ki. A Windows Forms használata nem ajánlott, mert a visszahívások nem fordulnak elő a felhasználói felület szálán. System.Windows.Forms.Timer jobb választás a Windows Forms. A kiszolgálóalapú időzítőfunkciók esetében érdemes lehet használni System.Timers.Timer, amely eseményeket hoz létre, és további funkciókkal rendelkezik.
Konstruktorok
| Name | Description |
|---|---|
| Timer(TimerCallback, Object, Int32, Int32) |
Inicializálja az |
| Timer(TimerCallback, Object, Int64, Int64) |
Inicializálja az |
| Timer(TimerCallback, Object, TimeSpan, TimeSpan) |
Inicializálja az |
| Timer(TimerCallback, Object, UInt32, UInt32) |
Inicializálja az |
| Timer(TimerCallback) |
Inicializálja az Timer osztály egy új példányát egy végtelen időszakkal és egy végtelen határidővel, az újonnan létrehozott Timer objektumot használva állapotobjektumként. |
Tulajdonságok
| Name | Description |
|---|---|
| ActiveCount |
Lekéri az aktuálisan aktív időzítők számát. Egy aktív időzítő regisztrálva van, hogy a jövőben egy bizonyos időpontban jelölje be, és még nem lett megszakítva. |
Metódusok
| Name | Description |
|---|---|
| Change(Int32, Int32) |
Módosítja a kezdési időpontot és az időzítő metódushívásai közötti időközt 32 bites aláírt egész számok használatával az időintervallumok méréséhez. |
| Change(Int64, Int64) |
Az időintervallumok méréséhez 64 bites aláírt egész számok használatával módosítja a kezdési időpontot és a metódushívások közötti időközt. |
| Change(TimeSpan, TimeSpan) |
Módosítja a kezdési időpontot és az időzítő metódushívásai közötti időközt az időintervallumok mérésére szolgáló értékek használatával TimeSpan . |
| Change(UInt32, UInt32) |
Módosítja a kezdési időpontot és az időzítő metódushívásai közötti időközt, 32 bites, aláíratlan egész számokkal méri az időintervallumokat. |
| CreateObjRef(Type) |
Létrehoz egy objektumot, amely tartalmazza a távoli objektumokkal való kommunikációhoz használt proxy létrehozásához szükséges összes releváns információt. (Öröklődés forrása MarshalByRefObject) |
| Dispose() |
A aktuális példánya által használt összes erőforrást felszabadítja Timer. |
| Dispose(WaitHandle) |
Felszabadítja az aktuális példány Timer által használt összes erőforrást, és jelzi, ha az időzítőt eltávolították. |
| DisposeAsync() |
A aktuális példánya által használt összes erőforrást felszabadítja Timer. |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| Finalize() |
Lehetővé teszi az objektumok számára, hogy megpróbálják felszabadítani az erőforrásokat, és más tisztítási műveleteket hajtsanak végre, mielőtt a szemétgyűjtés visszanyeri azt. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetLifetimeService() |
Elavult.
Lekéri a példány élettartamszabályzatát vezérlő aktuális élettartam-szolgáltatásobjektumot. (Öröklődés forrása MarshalByRefObject) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| InitializeLifetimeService() |
Elavult.
Beolvas egy élettartam-szolgáltatásobjektumot a példány élettartam-szabályzatának szabályozásához. (Öröklődés forrása MarshalByRefObject) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| MemberwiseClone(Boolean) |
Az aktuális MarshalByRefObject objektum sekély másolatát hozza létre. (Öröklődés forrása MarshalByRefObject) |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
Bővítő metódusok
| Name | Description |
|---|---|
| ConfigureAwait(IAsyncDisposable, Boolean) |
Konfigurálja, hogy az aszinkron eldobható feladatok hogyan lesznek végrehajtva. |
A következőre érvényes:
Szálbiztonság
Ez a típus szálbiztos.