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
Zamanlayıcı süresi dolduktan sonra çalışan bir iş öğesi oluşturmayı öğrenin.
Tek seferlik bir zamanlayıcı oluştur
İş öğesi için bir zamanlayıcı oluşturmak için CreateTimer yöntemini kullanın. İşi tamamlayan bir lambda sağlayın ve iş parçacığı havuzunun iş öğesini kullanılabilir bir iş parçacığına atamadan önce ne kadar bekleyeceğini belirtmek için delay parametresini kullanın. Gecikme bir TimeSpan yapısı kullanılarak belirtilir.
Not Kullanıcı arabirimine erişmek ve iş öğesinden ilerleme durumunu göstermek için CoreDispatcher.RunAsync kullanabilirsiniz.
Aşağıdaki örnek üç dakika içinde çalışan bir iş öğesi oluşturur:
TimeSpan delay = TimeSpan.FromMinutes(3);
ThreadPoolTimer DelayTimer = ThreadPoolTimer.CreateTimer(
(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.
//
});
}, delay);
TimeSpan delay;
delay.Duration = 3 * 60 * 10000000; // 10,000,000 ticks per second
ThreadPoolTimer ^ DelayTimer = ThreadPoolTimer::CreateTimer(
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.
//
ExampleUIUpdateMethod("Timer completed.");
}));
}), delay);
Tamamlama işleyicisi sağlama
Gerekirse, iş öğesinin iptalini ve tamamlanmasını TimerDestroyedHandlerile işleyin. Ek bir lambda sağlamak için CreateTimer aşırı yüklemesini kullanın. Bu, zamanlayıcı iptal edildiğinde veya iş öğesi tamamlandığında çalışır.
Aşağıdaki örnek, iş öğesini gönderen bir zamanlayıcı oluşturur ve iş öğesi tamamlandığında veya zamanlayıcı iptal edildiğinde bir yöntem çağırır:
TimeSpan delay = TimeSpan.FromMinutes(3);
bool completed = false;
ThreadPoolTimer DelayTimer = ThreadPoolTimer.CreateTimer(
(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.
//
});
completed = true;
},
delay,
(source) =>
{
//
// TODO: Handle work cancellation/completion.
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher.RunAsync(
CoreDispatcherPriority.High,
() =>
{
//
// UI components can be accessed within this scope.
//
if (completed)
{
// Timer completed.
}
else
{
// Timer cancelled.
}
});
});
TimeSpan delay;
delay.Duration = 3 * 60 * 10000000; // 10,000,000 ticks per second
completed = false;
ThreadPoolTimer ^ DelayTimer = ThreadPoolTimer::CreateTimer(
ref new TimerElapsedHandler([&](ThreadPoolTimer ^ source)
{
//
// TODO: Work
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([&]()
{
//
// UI components can be accessed within this scope.
//
}));
completed = true;
}),
delay,
ref new TimerDestroyedHandler([&](ThreadPoolTimer ^ source)
{
//
// TODO: Handle work cancellation/completion.
//
Dispatcher->RunAsync(CoreDispatcherPriority::High,
ref new DispatchedHandler([&]()
{
//
// Update the UI thread by using the UI core dispatcher.
//
if (completed)
{
// Timer completed.
}
else
{
// Timer cancelled.
}
}));
}));
Zamanlayıcıyı iptal etme
Süreölçer hala geri sayılıyorsa ancak iş öğesi artık gerekli değilse İptal'i çağırın. Zamanlayıcı iptal edilir ve iş öğesi iş parçacığı havuzuna gönderilmez.
DelayTimer.Cancel();
DelayTimer->Cancel();
Açıklamalar
UI iş parçacığını engelleyebildiğinden Evrensel Windows Platformu (UWP) uygulamaları Thread.Sleep'u kullanamaz. Bunun yerine bir iş öğesi oluşturmak için ThreadPoolTimer kullanabilirsiniz ve bu, iş öğesi tarafından gerçekleştirilen görevin, UI iş parçacığını engellemeden, gecikmesini sağlar.
İş birimlerini, zamanlayıcı iş birimlerini ve periyodik iş birimlerini gösteren tam kod örneği için thread pool örneğine bakın. Kod örneği başlangıçta Windows 8.1 için yazılmıştır, ancak kod Windows 10'da yeniden kullanılabilir.
Zamanlayıcıları yineleme hakkında daha fazla bilgi için bkz. Düzenli aralıklarla çalışma öğesi oluşturma.
İlgili konular
- İş parçacığı havuzuna iş öğesi gönderme
- İş parçacığı havuzunun kullanımı için en iyi yöntemler
- İş öğesi göndermek için zamanlayıcı kullanma