Timer Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir iş parçacığı havuzu iş parçacığında belirtilen aralıklarla bir yöntemi yürütmek için bir mekanizma sağlar. Bu sınıf devralınamaz.
public ref class Timer sealed : IDisposable
public ref class Timer sealed : MarshalByRefObject, IAsyncDisposable, IDisposable
public ref class Timer sealed : MarshalByRefObject, System::Threading::ITimer
public ref class Timer sealed : MarshalByRefObject, IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Timer : IDisposable
public sealed class Timer : MarshalByRefObject, IAsyncDisposable, IDisposable
public sealed class Timer : MarshalByRefObject, System.Threading.ITimer
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
type Timer = class
inherit MarshalByRefObject
interface IAsyncDisposable
interface IDisposable
interface ITimer
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 IAsyncDisposable, IDisposable
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements ITimer
Public NotInheritable Class Timer
Inherits MarshalByRefObject
Implements IDisposable
- Devralma
-
Timer
- Devralma
- Öznitelikler
- Uygulamalar
Örnekler
Aşağıdaki örnek, imzası temsilciyle aynı TimerCallback olan bir yöntemi içeren bir CheckStatus
sınıfı tanımlarStatusChecker
.
state
yönteminin CheckStatus
bağımsız değişkeni, uygulama iş parçacığını ve geri çağırma temsilcisini yürüten iş parçacığı havuzu iş parçacığını eşitlemek için kullanılan bir AutoResetEvent nesnedir.
StatusChecker
sınıfı iki durum değişkeni de içerir:
invokeCount
Geri çağırma yönteminin çağrılma sayısını gösterir.
maxCount
Geri çağırma yönteminin en fazla kaç kez çağrılması gerektiğini belirler.
Uygulama iş parçacığı, bir saniye bekleyen ve ardından her 250 milisaniyede bir geri çağırma yöntemini yürüten CheckStatus
zamanlayıcıyı oluşturur. Uygulama iş parçacığı daha sonra nesne sinyal alınana AutoResetEvent kadar engeller.
CheckStatus
Geri çağırma yöntemi zamanları maxCount
yürütürken, nesnesinin AutoResetEvent.Set
durumunu AutoResetEvent işaretlendi olarak ayarlamak için yöntemini çağırır. Bu ilk kez gerçekleştiğinde, uygulama iş parçacığı yöntemini çağırarak Change(Int32, Int32) geri çağırma yönteminin her yarım saniyede bir yürütülmesini sağlar. Nesne sinyal alınana AutoResetEvent kadar bir kez daha engeller. Bu durumda zamanlayıcı yöntemini çağırarak Dispose yok edilir ve uygulama sonlandırılır.
using namespace System;
using namespace System::Threading;
ref class StatusChecker
{
private:
int invokeCount, 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:h:mm:ss.fff} Checking status {1,2}.",
DateTime::Now, ++invokeCount);
if (invokeCount == maxCount) {
// Reset the counter and signal the waiting thread.
invokeCount = 0;
autoEvent->Set();
}
}
};
ref class TimerExample
{
public:
static void Main()
{
// Create an AutoResetEvent to signal the timeout threshold in the
// timer callback has been reached.
AutoResetEvent^ autoEvent = gcnew AutoResetEvent(false);
StatusChecker^ statusChecker = gcnew StatusChecker(10);
// Create a delegate that invokes methods for the timer.
TimerCallback^ tcb =
gcnew TimerCallback(statusChecker, &StatusChecker::CheckStatus);
// 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);
Timer^ stateTimer = gcnew Timer(tcb, autoEvent, 1000, 250);
// When autoEvent signals, change the period to every half second.
autoEvent->WaitOne(5000, false);
stateTimer->Change(0, 500);
Console::WriteLine("\nChanging period to .5 seconds.\n");
// When autoEvent signals the second time, dispose of the timer.
autoEvent->WaitOne(5000, false);
stateTimer->~Timer();
Console::WriteLine("\nDestroying timer.");
}
};
int main()
{
TimerExample::Main();
}
// 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.
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.
Açıklamalar
Yürütmek istediğiniz Timer yöntemi belirtmek için bir TimerCallback temsilci kullanın. Temsilcinin TimerCallback imzası:
void TimerCallback(Object state)
void TimerCallback(Object state)
Sub TimerCallback(state As Object)
Zamanlayıcı temsilcisi, zamanlayıcı oluşturulduğunda belirtilir ve değiştirilemez. yöntemi zamanlayıcıyı oluşturan iş parçacığında yürütülmüyor; sistem tarafından sağlanan bir ThreadPool iş parçacığında yürütülür.
İpucu
.NET, her biri farklı işlevler sunan birkaç zamanlayıcı sınıfı içerir:
- System.Timers.Timer, bir olayı tetikler ve kodu düzenli aralıklarla bir veya daha fazla olay havuzu içinde yürütür. sınıfı, çok iş parçacıklı bir ortamda sunucu tabanlı veya hizmet bileşeni olarak kullanılmak üzere tasarlanmıştır; kullanıcı arabirimi yoktur ve çalışma zamanında görünmez.
- System.Threading.Timer, bir iş parçacığı havuzu iş parçacığında düzenli aralıklarla tek bir geri çağırma yöntemi yürütür. Geri çağırma yöntemi, zamanlayıcı örneği oluşturulurken tanımlanır ve değiştirilemez. System.Timers.Timer sınıfı gibi bu sınıf da çok iş parçacıklı bir ortamda sunucu tabanlı veya hizmet bileşeni olarak kullanılmak üzere tasarlanmıştır; kullanıcı arabirimi yoktur ve çalışma zamanında görünmez.
- System.Windows.Forms.Timer, bir olayı tetikleyen ve kodu düzenli aralıklarla bir veya daha fazla olay havuzu içinde yürüten bir Windows Forms bileşenidir. Bileşenin kullanıcı arabirimi yoktur ve tek iş parçacıklı bir ortamda kullanılmak üzere tasarlanmıştır; kullanıcı arabirimi iş parçacığında yürütülür.
- System.Web.UI.Timer(yalnızca .NET Framework), düzenli aralıklarla zaman uyumsuz veya zaman uyumlu web sayfası geri göndermeleri gerçekleştiren bir ASP.NET bileşeni.
-
System.Windows.Threading.DispatcherTimer, kuyruğa tümleştirilmiş
Dispatcher
bir zamanlayıcı. Bu süreölçer belirtilen bir zaman aralığında belirtilen bir öncelikle işlenir.
Zamanlayıcı oluşturduğunuzda, yöntemin ilk yürütülmesinden önce bekleyebileceğiniz süreyi (son süre) ve sonraki yürütmeler (süre) arasında bekleyebileceğiniz süreyi belirtebilirsiniz. Timer sınıfı, sistem saatiyle aynı çözünürlüğe sahiptir. Bu, süre sistem saatinin çözünürlüğünden küçükse, temsilcinin TimerCallback Windows 7 ve Windows 8 sistemlerinde yaklaşık 15 milisaniye olan sistem saatinin çözünürlüğüyle tanımlanan aralıklarda yürütüleceği anlamına gelir. yöntemini kullanarak son zamanı ve süreyi değiştirebilir veya zamanlayıcıyı Change devre dışı bırakabilirsiniz.
Not
kullandığınız Timersürece, buna bir başvuru tutmanız gerekir. Herhangi bir Timer yönetilen nesnede olduğu gibi , başvuru olmadığında çöp toplamaya tabidir. hala Timer etkin olması, toplanmasını engellemez.
Not
Kullanılan sistem saati GetTickCount tarafından kullanılan saatle aynıdır ve timeBeginPeriod ve timeEndPeriod ile yapılan değişikliklerden etkilenmez.
Bir süreölçer artık gerekli olmadığında, zamanlayıcı tarafından tutulan kaynakları boşaltmak için yöntemini kullanın Dispose . Zamanlayıcı, iş parçacığı havuzu iş parçacıkları tarafından yürütülmeye yönelik Dispose() geri çağırmaları kuyruğa aldığı için yöntem aşırı yüklemesi çağrıldıktan sonra geri çağırmaların gerçekleşebileceğini unutmayın. Tüm geri çağırmalar tamamlanana Dispose(WaitHandle) kadar beklemek için yöntem aşırı yüklemesini kullanabilirsiniz.
Zamanlayıcı tarafından yürütülen geri çağırma yöntemi, iş parçacıklarında ThreadPool çağrıldığından yeniden girin. Zamanlayıcı aralığı geri çağırmayı yürütmek için gereken süreden azsa veya tüm iş parçacığı havuzu iş parçacıkları kullanımdaysa ve geri çağırma birden çok kez kuyruğa alınmışsa, geri çağırma iki iş parçacığı havuzu iş parçacığında aynı anda yürütülebilir.
Not
System.Threading.Timer geri çağırma yöntemlerini kullanan basit ve basit bir zamanlayıcıdır ve iş parçacığı havuzu iş parçacıkları tarafından sunulur. Geri çağırmaları kullanıcı arabirimi iş parçacığında gerçekleşmediğinden, Windows Forms ile kullanılması önerilmez. System.Windows.Forms.TimerWindows Forms ile kullanmak için daha iyi bir seçimdir. Sunucu tabanlı zamanlayıcı işlevselliği için, olayları tetikleyen ve ek özelliklere sahip olan kullanmayı System.Timers.Timerdüşünebilirsiniz.
Oluşturucular
Timer(TimerCallback) |
Yeni oluşturulan Timer nesneyi durum nesnesi olarak kullanarak, sınıfının yeni bir örneğini Timer sonsuz bir süre ve sonsuz bir süreyle başlatır. |
Timer(TimerCallback, Object, Int32, Int32) |
Zaman aralığını belirtmek için 32 bit imzalı bir tamsayı kullanarak sınıfının yeni bir örneğini |
Timer(TimerCallback, Object, Int64, Int64) |
Zaman aralıklarını ölçmek için 64 bit imzalı tamsayılar kullanarak sınıfının yeni bir örneğini |
Timer(TimerCallback, Object, TimeSpan, TimeSpan) |
Zaman aralıklarını ölçmek için değerleri kullanarak TimeSpan sınıfının yeni bir örneğini |
Timer(TimerCallback, Object, UInt32, UInt32) |
Zaman aralıklarını ölçmek için 32 bit işaretsiz tamsayılar kullanarak sınıfının yeni bir örneğini |
Özellikler
ActiveCount |
Şu anda etkin olan zamanlayıcı sayısını alır. Etkin süreölçer gelecekte belirli bir noktada işaretlenmek üzere kaydedilir ve henüz iptal edilmedi. |
Yöntemler
Change(Int32, Int32) |
Zaman aralıklarını ölçmek için 32 bit imzalı tamsayılar kullanarak zamanlayıcı için yöntem çağrıları arasındaki başlangıç saatini ve aralığı değiştirir. |
Change(Int64, Int64) |
Zaman aralıklarını ölçmek için 64 bit imzalı tamsayılar kullanarak zamanlayıcının başlangıç saatini ve yöntem çağrıları arasındaki aralığı değiştirir. |
Change(TimeSpan, TimeSpan) |
Zaman aralıklarını ölçmek için değerleri kullanarak TimeSpan zamanlayıcının başlangıç saatini ve yöntem çağrıları arasındaki aralığı değiştirir. |
Change(UInt32, UInt32) |
Zaman aralıklarını ölçmek için 32 bit işaretsiz tamsayılar kullanarak zamanlayıcının başlangıç saatini ve yöntem çağrıları arasındaki aralığı değiştirir. |
CreateObjRef(Type) |
Uzak bir nesneyle iletişim kurmak için kullanılan bir ara sunucu oluşturmak için gereken tüm ilgili bilgileri içeren bir nesne oluşturur. (Devralındığı yer: MarshalByRefObject) |
Dispose() |
geçerli örneği Timertarafından kullanılan tüm kaynakları serbest bırakır. |
Dispose(WaitHandle) |
geçerli örneği Timer tarafından kullanılan tüm kaynakları serbest bırakır ve zamanlayıcı atıldığında sinyal gönderir. |
DisposeAsync() |
geçerli örneği Timertarafından kullanılan tüm kaynakları serbest bırakır. |
Equals(Object) |
Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler. (Devralındığı yer: Object) |
Finalize() |
Bir nesnenin, atık toplama tarafından geri kazanılmadan önce kaynakları boşaltmaya ve diğer temizleme işlemlerini gerçekleştirmeye çalışmasına izin verir. |
GetHashCode() |
Varsayılan karma işlevi işlevi görür. (Devralındığı yer: Object) |
GetLifetimeService() |
Geçersiz.
Bu örnek için yaşam süresi ilkesini denetleen geçerli yaşam süresi hizmet nesnesini alır. (Devralındığı yer: MarshalByRefObject) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
InitializeLifetimeService() |
Geçersiz.
Bu örneğin yaşam süresi ilkesini denetlemek için bir yaşam süresi hizmet nesnesi alır. (Devralındığı yer: MarshalByRefObject) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
MemberwiseClone(Boolean) |
Geçerli MarshalByRefObject nesnenin sığ bir kopyasını oluşturur. (Devralındığı yer: MarshalByRefObject) |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |
Uzantı Metotları
ConfigureAwait(IAsyncDisposable, Boolean) |
Zaman uyumsuz bir atılabilir öğeden döndürülen görevlerde awaits işleminin nasıl gerçekleştirildiğini yapılandıran. |
Şunlara uygulanır
İş Parçacığı Güvenliği
Bu güvenli iş parçacığı türüdür.
Ayrıca bkz.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin