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ının süresi dolduktan sonra çalışacak bir iş öğesi oluşturmayı öğrenin.
Tek seferlik bir zamanlayıcı oluşturun
İş öğ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.
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 üç 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, timerDestroyedHandler ile iş öğesinin iptalini ve tamamlanmasını 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önderilmeyecektir.
DelayTimer.Cancel();
DelayTimer->Cancel();
Remarks
Windows uygulamaları, çağıran iş parçacığını blokladığı için Thread.Sleep yönteminden kaçınmalıdır; bu yöntem UI iş parçacığında çağrılırsa kullanıcı arabiriminin yanıt vermemesine neden olabilir. Bunun yerine bir iş öğesi oluşturmak için ThreadPoolTimer kullanabilirsiniz; bu da UI iş parçacığını engellemeden iş öğesi tarafından gerçekleştirilen görevi geciktirir.
İş öğelerini, zamanlayıcı iş öğelerini ve periyodik iş öğelerini gösteren tam bir kod örneği için iş parçacığı havuzu örneğine bakın. Kod örneği başlangıçta Windows 8.1 için yazılmıştır, ancak kod Windows 10 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
Windows developer