- VideoPlaybackService warms LibVLC on a worker at App.OnStartup so the
first GameDetailWindow snap-video doesn't pay the multi-second native
init cost on the dispatcher.
- PlaySnapVideoAsync allocates WriteableBitmap + native frame buffer on
the UI thread first (display callback always sees a populated bitmap),
then runs MediaPlayer construction, SetVideoFormat, SetVideoCallbacks,
Media open, and Play() under Task.Run. A _closed flag plus a
Dispatcher.Invoke critical section guard against OnClosed racing the
assignment/Play pair.
- OnClosed zeros _videoBitmap and _videoBuffer before FreeHGlobal so any
in-flight VLC display callback bails before memcpying into freed memory.
- ShowCoverArtPlaceholder decodes BitmapImage on a worker (Freeze()d
before crossing back) and assigns on UI.
- DarkComboBox style added to DarkTheme; FriendsAddButton picks up
PlayButtonStyle; minor friend card/detail polish.