wpfui icon indicating copy to clipboard operation
wpfui copied to clipboard

Switching theme from a different thread is raising an exception on Windows 10

Open DanClarkLexacom opened this issue 2 months ago • 1 comments

Describe the bug

If you attempt to call ApplicationThemeManager from a different thread a InvalidOperationException is raised detailing that "The calling thread cannot access this object because a different thread owns it.". This exception appears within the ApplyDefaultWindowBorder method of the ClientBorder control. This appears to be isolated to Windows 10 only, because of the operating version check before hand.

There is no guarantee the the ThemeChanged event was raised on the thread, so I only can think that we should be doing a thread safety check and ensuring that we are on the UI thread before updating the UI.

To Reproduce

  • Assume that you are running on a variant of Windows 10.
  • Access and call ApplicationThemeManager.Apply from a different thread other than the UI thread.

Expected behavior

It should be possible to switch theme from a different thread, ensuring that there were thread safety checks done at the place of applying the UI changes.

Screenshots

image

OS version

Windows 10 21H2

.NET version

.net 8.0

WPF-UI NuGet version

3.0.4

Additional context

No response

DanClarkLexacom avatar Apr 15 '24 15:04 DanClarkLexacom

I use the Dispatcher to make sure it's being run on the main thread

nabeelio avatar Apr 15 '24 22:04 nabeelio