Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
důležitá rozhraní API
Zjistěte, jak vytvořit pracovní položku, která se pravidelně opakuje.
Vytvoření pravidelné pracovní položky
K vytvoření pravidelné pracovní položky použijte metodu CreatePeriodicTimer . Zadejte výraz lambda, který provede danou operaci, a pomocí parametru period určete interval mezi odesláními. Časový interval je určen pomocí struktury TimeSpan. Pracovní položka bude znovu odeslána při každém uplynutí období, proto se ujistěte, že je doba dostatečná pro dokončení práce.
CreatePeriodicTimer vrátí threadPoolTimer objekt. Uložte tento objekt v případě, že je potřeba časovač zrušit.
Note
Vyhněte se zadání hodnoty nuly (nebo jakékoli hodnoty menší než jedna milisekunda) pro interval. To způsobí, že se periodický časovač bude místo toho chovat jako jednorázový časovač.
Note
V aplikacích WinUI 3 použijte DispatcherQueue.TryEnqueue z Microsoft.UI.Dispatching.DispatcherQueue pro přístup k vláknu uživatelského rozhraní a k zobrazení průběhu z pracovní položky. Podrobnosti najdete v přehledu DispatcherQueue .
Následující příklad vytvoří pracovní položku, která se spustí každých 60 sekund:
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);
Zpracování zrušení pravidelné pracovní položky (volitelné)
V případě potřeby můžete zpracovat zrušení pravidelného časovače pomocí timerDestroyedHandler. Pomocí CreatePeriodicTimer přetížení zadejte další lambda, který zpracovává zrušení periodické pracovní položky.
Následující příklad vytvoří pravidelnou pracovní položku, která se opakuje každých 60 sekund a také poskytuje obslužnou rutinu zrušení:
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.
}));
}));
Zrušení časovače
V případě potřeby zavolejte metodu Cancel , aby se periodická pracovní položka neopakovala. Pokud je pracovní položka spuštěna, když je periodický časovač zrušen, může se dokončit. TimerDestroyedHandler (pokud je k dispozici) je volána, když jsou dokončeny všechny instance periodické pracovní položky.
PeriodicTimer.Cancel();
PeriodicTimer->Cancel();
Remarks
Informace o časovači s jedním použitím naleznete v tématu Použití časovače k odeslání pracovní položky.
Příbuzná témata
Windows developer