Wykonywanie w tle w klasycznych aplikacjach Zestaw SDK do aplikacji systemu Windows

Aplikacje klasyczne utworzone za pomocą Zestaw SDK do aplikacji systemu Windows działają w sposób ciągły, nawet gdy użytkownik przełącza się do innej aplikacji. W tym artykule wyjaśniono, jak działa wykonywanie w tle i zaleca najlepsze rozwiązania dotyczące wydajności.

Ważna

Aplikacje klasyczne nie są automatycznie zawieszane ani przerywane przez system w taki sposób, w jaki są aplikacje platformy UWP. Aplikacja będzie kontynuowana do momentu zamknięcia jej przez użytkownika lub zakończenia procesu. Aby działać bez ograniczeń czasowych, nie są wymagane żadne specjalne interfejsy API ani ograniczone uprawnienia. W razie potrzeby użyj powiadomień pamięci systemowej, aby reagować na wykorzystanie zasobów.

Aplikacje komputerowe działają natywnie w tle

W systemie UWP działanie w tle bez ograniczeń czasowych wymagało zastrzeżonego uprawnienia extendedBackgroundTaskTime oraz wdrożenia korporacyjnego. Aplikacje klasyczne nie mają tego ograniczenia. Wątki Twojej aplikacji nadal działają, liczniki czasu nadal działają, a połączenia sieciowe pozostają otwarte niezależnie od tego, czy Twoje okno jest widoczne.

Oznacza to, że można wykonywać następujące czynności:

  • Zachowaj trwałe połączenia z serwerami (na przykład aplikacje do czatów, monitorowanie w czasie rzeczywistym).
  • Uruchamianie długich obliczeń (na przykład kodowanie wideo, analiza danych).
  • Sonduj dostępność aktualizacji zgodnie z harmonogramem.
  • Odtwórz kontrolki audio i aktualizuj multimedia.

Najlepsze rozwiązania dotyczące wydajności baterii

Mimo że aplikacje klasyczne mogą działać bez ograniczeń, bycie dobrym obywatelem na urządzeniach zasilanych baterią poprawia środowisko użytkownika. System może oznaczyć Twoją aplikację jako intensywnie korzystającą z zasobów, jeśli w tle nadmiernie obciąża procesor lub korzysta z sieci.

Zmniejsz pracę, gdy okno nie jest widoczne

// m_window is your app's main Window; _updateTimer is a DispatcherTimer field.
Microsoft.UI.Xaml.Window m_window = this;
Microsoft.UI.Xaml.DispatcherTimer _updateTimer = new();

m_window.Activated += (sender, args) =>
{
    if (args.WindowActivationState == WindowActivationState.Deactivated)
    {
        // Window lost focus — slow down background processing
        _updateTimer.Interval = TimeSpan.FromSeconds(30);
    }
    else
    {
        // Window is active — resume full-speed processing
        _updateTimer.Interval = TimeSpan.FromSeconds(1);
    }
};

Używaj energooszczędnych wzorców

  • Zmniejsz częstotliwość czasomierza — przełącz się z sekundy podrzędnej na interwały wielosekundowe, gdy aplikacja znajduje się w tle.
  • Wstrzymaj renderowanie inne niż niezbędne — zatrzymaj animacje, pracę procesora GPU i aktualizacje ekranu.
  • Żądania sieciowe wsadowe — połącz wiele żądań w mniej, większe.
  • Uwzględniaj tryb oszczędzania baterii — sprawdź PowerManager.BatteryStatus i ogranicz pracę, gdy urządzenie działa na baterii.
using Windows.System.Power;

private bool _enableBackgroundSync = true;

private void CheckPowerState()
{
    if (PowerManager.BatteryStatus == BatteryStatus.Discharging &&
        PowerManager.RemainingChargePercent < 20)
    {
        // Reduce background work significantly
        _enableBackgroundSync = false;
    }
}

Używanie zadań w tle do pracy sterowanej zdarzeniami

Jeśli aplikacja musi reagować na zdarzenia systemowe (takie jak timer, powiadomienie push lub zmiana sieci) bez ciągłego działania, rozważ użycie zadania w tle:

var builder = new BackgroundTaskBuilder
{
    Name = "PeriodicSync",
    TaskEntryPoint = "MyApp.Background.SyncTask"
};
builder.SetTrigger(new TimeTrigger(15, false));
builder.Register();

Note

Zadania w tle wymagają tożsamości pakietu MSIX na potrzeby rejestracji. Jeśli aplikacja nie jest pakietowana, użyj zamiast tego timerów w procesie lub zaplanowanych zadań.

Wydłużone działanie dla zadań krytycznych

Jeśli masz pracę, która nie powinna zostać przerwana przez zarządzanie energią (na przykład zapisywanie dużego pliku), użyj sesji rozszerzonego wykonywania. Sygnalizuje to systemowi, że praca jest ważna, nawet na urządzeniach zasilanych baterią.

Porównanie z wykonywaniem w tle platformy UWP

Funkcja platforma UWP Pulpit nawigacyjny
Aplikacja działa w tle Tylko w przypadku zadań w tle lub ograniczonych możliwości Zawsze
Wymaga deklaracji możliwości Tak (extendedBackgroundTaskTime) No
Kończenie działania systemu w celu zapisania zasobów Yes No
Ograniczanie wydajności w trybie oszczędzania baterii System wymusza ograniczenia Aplikacja powinna samodzielnie regulować
Zadania w tle dotyczące pracy sterowanej zdarzeniami Podstawowy mechanizm Opcjonalne uzupełnienie