Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
"Utracono urządzenie" odnosi się do sytuacji, w której urządzenie graficzne procesora GPU staje się bezużyteczne do dalszego renderowania. Może to wystąpić z powodu awarii sprzętu procesora GPU, usterek sterowników, aktualizacji oprogramowania sterowników lub przełączenia aplikacji z jednego procesora GPU na inny. Utracone urządzenie nie może być już używane, a każda próba jego użycia z Win2D zgłosi wyjątek. Aby wyjść z tej sytuacji, aplikacja musi utworzyć nowe urządzenie, a następnie przywrócić wszystkie zasoby graficzne.
Nie wszystkie aplikacje próbują odzyskać dane po utracie urządzenia. Jest to (miejmy nadzieję!) rzadka sytuacja, więc niektórzy deweloperzy po prostu pozwolą swoim aplikacjom ulec awarii, jeśli wystąpi. Dla tych, którzy wolą obsługiwać urządzenia utracone w niezawodny sposób, w tym artykule wyjaśniono, jak.
Utracono urządzenie podczas korzystania z kontrolek XAML
Kontrolki Win2D (CanvasControlCanvasVirtualControli CanvasAnimatedControl) próbują automatycznie obsługiwać utracone urządzenie w imieniu aplikacji.
Po wykryciu utraty urządzenia te kontrolki odtworzą swoje CanvasDevice, a następnie zgłoszą zdarzenie CreateResources, przekazując CanvasCreateResourcesReason o wartości NewDevice. Aplikacje powinny reagować na to zdarzenie przez ponowne utworzenie wszystkich zasobów graficznych przy użyciu nowego urządzenia i zaktualizowanie wszelkich struktur danych, które mogą zawierać odwołania do starych, już nieprawidłowych zasobów.
Kontrolki mogą automatycznie przechwytywać i obsługiwać wyjątki dotyczące utraty urządzenia, które są zgłaszane przez programy obsługi zdarzeń CreateResources, Update, Drawlub RegionsInvalidated. Jeśli wywołasz interfejsy API do rysowania Win2D z innych miejsc (na przykład w programie obsługi zdarzeń wskaźnika lub klawiatury), zobacz następną sekcję.
Ręczne obsługiwanie utraconego urządzenia
Jeśli używasz systemu Win2D bez wbudowanych kontrolek lub spoza CreateResources, Update lub Draw procedur obsługi zdarzeń, odpowiedzialność za przechwytywanie i zgłaszanie utraconych wyjątków urządzeń jest twoim zadaniem. Realizuje się to za pomocą metod IsDeviceLost(Int32) i RaiseDeviceLost().
try
{
DrawStuff();
}
catch (Exception e) where canvasDevice.IsDeviceLost(e.ErrorCode)
{
canvasDevice.RaiseDeviceLost();
}
Wywołanie RaiseDeviceLost informuje wszystkie kontrolki, które udostępniają to urządzenie, o zainicjowaniu ścieżki odzyskiwania utraconego urządzenia. Jeśli otrzymałeś swoje urządzenie z innego źródła niż kontrola, użyj zdarzenia DeviceLost, aby być poinformowanym, gdy zostanie utracone.
Jak przetestować obsługę utraconych urządzeń
Najprostszym sposobem przetestowania, czy aplikacja będzie wykonywać odpowiednie czynności w odpowiedzi na utratę urządzenia, jest wyłączenie sprzętowego procesora GPU podczas działania aplikacji:
- Otwórz Menedżera urządzeń (okno Eksploratora —> kliknij prawym przyciskiem myszy pozycję "Ten komputer" — "Właściwości" —>> "Menedżer urządzeń")
- Rozwiń węzeł "Karty graficzne"
- Kliknij prawym przyciskiem myszy wpis dla procesora GPU i kliknij pozycję "Wyłącz" Spowoduje to obejście sprzętowego procesora GPU, w którym system Windows przełącza się na urządzenie renderowania oprogramowania WARP, a wszystkie aktywne aplikacje doświadczają utraty urządzenia.
Nie zapomnij ponownie włączyć procesora GPU po wykonaniu tego testu! Jeśli chcesz przetestować urządzenie utracone więcej niż raz, najlepiej ponownie uruchomić aplikację za każdym razem (zawsze uruchamiaj ją z włączonym procesorem GPU). Wielokrotne włączanie i wyłączanie GPU podczas działania aplikacji nie prowadzi niezawodnie do utraty urządzeń, ponieważ może ona po prostu kontynuować używanie urządzenia programowego WARP.
Podczas testowania utraconej obsługi urządzeń prawdopodobnie chcesz również upewnić się, że aplikacja obsługuje poprawną obsługę dynamicznych wyświetlania zmian DPI.