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 spustí po uplynutí časovače.
Vytvořte jednorázový časovač
Pomocí metody CreateTimer vytvořte časovač pro pracovní položku. Zadejte lambda, která provede práci, a pomocí parametru delay určete, jak dlouho fond vláken čeká, než může pracovní položku přiřadit k dostupnému vláknu. Zpoždění je zadáno pomocí struktury TimeSpan .
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í za tři minuty:
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);
Zadejte obslužnou rutinu po dokončení
V případě potřeby zpracujte zrušení a dokončení pracovní položky pomocí timerDestroyedHandler. Pomocí přetížení CreateTimer zadejte další lambda. Spustí se při zrušení časovače nebo po dokončení pracovní položky.
Následující příklad vytvoří časovač, který odešle pracovní položku a zavolá metodu, když pracovní položka skončí nebo časovač je zrušen:
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.
}
}));
}));
Zrušení časovače
Pokud časovač stále odpočítává, ale pracovní úloha už není potřeba, klikněte na Zrušit. Časovač bude zrušen a pracovní položka nebude odeslána do fondu vláken.
DelayTimer.Cancel();
DelayTimer->Cancel();
Remarks
Aplikace pro Windows by se měly vyhnout použití Thread.Sleep, protože blokuje volající vlákno, což může způsobit, že uživatelské rozhraní přestane reagovat, pokud se volá ve vlákně UI. Místo toho můžete k vytvoření pracovní položky použít ThreadPoolTimer a tím se zpozdí úloha, kterou pracovní položka provede, aniž by blokovala vlákno uživatelského rozhraní.
Podívejte se na ukázku fondu vláken pro kompletní vzorový kód, který ukazuje pracovní položky, pracovní položky časovače a pravidelné pracovní položky. Vzorový kód byl původně napsán pro Windows 8.1, ale kód lze znovu použít v Windows 10.
Informace o opakujících se časovačů najdete v tématu Vytvoření pravidelné pracovní položky.
Příbuzná témata
Windows developer