Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli API'ler
Düzenli aralıklarla tekrarlanan bir iş öğesi oluşturmayı öğrenin.
Periyodik iş öğesini oluşturma
Düzenli bir iş öğesi oluşturmak için CreatePeriodicTimer yöntemini kullanın. çalışmayı tamamlayan bir lambda sağlayın ve gönderimler arasındaki aralığı belirtmek için period parametresini kullanın. Dönem bir TimeSpan yapısı kullanılarak belirtilir. Dönem her geçtiğinde iş öğesi yeniden gönderilir, bu nedenle sürenin çalışmanın tamamlanması için yeterince uzun olduğundan emin olun.
CreatePeriodicTimer bir ThreadPoolTimer nesnesi döndürür. Zamanlayıcının iptal edilmesi gerektiğinde bu nesneyi depolayın.
Note
Aralık için sıfır (veya bir milisaniyeden küçük bir değer) değeri belirtmekten kaçının. Bu durum, periyodik zamanlayıcının tek seferlik bir zamanlayıcı gibi davranmasına neden olur.
Note
WinUI 3 uygulamalarında, kullanıcı arabirimi iş parçacığına erişmek ve iş öğesinden ilerleme durumunu görüntülemek için Microsoft.UI.Dispatching.DispatcherQueue içindeki DispatcherQueue.TryEnqueue öğesini kullanın. Ayrıntılar için DispatcherQueue'a genel bakış bölümüne bakın.
Aşağıdaki örnek, 60 saniyede bir çalışan bir iş öğesi oluşturur:
TimeSpan period = TimeSpan.FromSeconds(60);
ThreadPoolTimer PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer((source) =>
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher.RunAsync(CoreDispatcherPriority.High,
() =>
{
//
// UI components can be accessed within this scope.
//
});
}, period);
TimeSpan period;
period.Duration = 60 * 10000000; // 10,000,000 ticks per second
ThreadPoolTimer ^ PeriodicTimer = ThreadPoolTimer::CreatePeriodicTimer(
ref new TimerElapsedHandler([this](ThreadPoolTimer^ source)
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([this]()
{
//
// UI components can be accessed within this scope.
//
}));
}), period);
Periyodik iş öğesinin iptalini işleme (isteğe bağlı)
Gerekirse, periyodik zamanlayıcının iptalini TimerDestroyedHandler ile gerçekleştirebilirsiniz. Düzenli iş öğesinin iptalini işleyen ek bir lambda sağlamak için CreatePeriodicTimer aşırı yüklemesini kullanın.
Aşağıdaki örnek, her 60 saniyede bir tekrarlanan düzenli bir iş öğesi oluşturur ve ayrıca bir iptal işleyicisi sağlar:
using Windows.System.Threading;
TimeSpan period = TimeSpan.FromSeconds(60);
ThreadPoolTimer PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer((source) =>
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher.RunAsync(CoreDispatcherPriority.High,
() =>
{
//
// UI components can be accessed within this scope.
//
});
},
period,
(source) =>
{
//
// TODO: Handle periodic timer cancellation.
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher->RunAsync(CoreDispatcherPriority.High,
()=>
{
//
// UI components can be accessed within this scope.
//
// Periodic timer cancelled.
}));
});
using namespace Windows::System::Threading;
using namespace Windows::UI::Core;
TimeSpan period;
period.Duration = 60 * 10000000; // 10,000,000 ticks per second
ThreadPoolTimer ^ PeriodicTimer = ThreadPoolTimer::CreatePeriodicTimer(
ref new TimerElapsedHandler([this](ThreadPoolTimer^ source)
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([this]()
{
//
// UI components can be accessed within this scope.
//
}));
}),
period,
ref new TimerDestroyedHandler([&](ThreadPoolTimer ^ source)
{
//
// TODO: Handle periodic timer cancellation.
//
Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([&]()
{
//
// UI components can be accessed within this scope.
//
// Periodic timer cancelled.
}));
}));
Zamanlayıcıyı iptal etme
Gerektiğinde, düzenli iş öğesinin yinelenmesine engel olmak için Cancel yöntemini çağırın. Periyodik zamanlayıcı iptal edildiğinde iş öğesi çalışıyorsa tamamlanmasına izin verilir. TimerDestroyedHandler, belirtilmişse, periyodik iş öğesinin tüm örnekleri tamamlandığında çağrılır.
PeriodicTimer.Cancel();
PeriodicTimer->Cancel();
Remarks
Tek kullanımlık zamanlayıcılar hakkında bilgi için bkz. İş öğesi göndermek için zamanlayıcı kullanma.
İlgili konular
Windows developer