From 389256a380456481e1e0c1e3731f38f2e4de0952 Mon Sep 17 00:00:00 2001 From: Stone_Red <56473591+Stone-Red-Code@users.noreply.github.com> Date: Sun, 28 Dec 2025 01:47:38 +0100 Subject: [PATCH] Improve performance of plugin window bitmap rendering --- src/DesktopMagic/Plugins/PluginWindow.xaml.cs | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/DesktopMagic/Plugins/PluginWindow.xaml.cs b/src/DesktopMagic/Plugins/PluginWindow.xaml.cs index 852b255..d656d89 100644 --- a/src/DesktopMagic/Plugins/PluginWindow.xaml.cs +++ b/src/DesktopMagic/Plugins/PluginWindow.xaml.cs @@ -175,6 +175,8 @@ public partial class PluginWindow : Window, IPluginWindow bitmapData.Scan0, bitmapData.Stride * bitmapData.Height, bitmapData.Stride); bitmap.UnlockBits(bitmapData); + + bitmapSource.Freeze(); return bitmapSource; } @@ -221,7 +223,11 @@ public partial class PluginWindow : Window, IPluginWindow border.CornerRadius = new CornerRadius(settings.Theme.CornerRadius); pluginClassInstance?.OnThemeChanged(); - pluginClassInstance?.Application.UpdateWindow(); + + if (pluginClassInstance?.UpdateInterval is 0 or > 500) + { + pluginClassInstance.Application.UpdateWindow(); + } } private void ExecuteSource() @@ -392,7 +398,11 @@ public partial class PluginWindow : Window, IPluginWindow element.OnValueChanged += () => { pluginClassInstance?.OnSettingsChanged(); - pluginClassInstance?.Application.UpdateWindow(); + + if (pluginClassInstance?.UpdateInterval is 0 or > 500) + { + pluginClassInstance.Application.UpdateWindow(); + } }; settingElements.Add(settingElement); @@ -583,11 +593,13 @@ public partial class PluginWindow : Window, IPluginWindow _ => BitmapScalingMode.Unspecified }; - //Update Image - Dispatcher.Invoke(() => + // Update Image + BitmapSource frozenSource = BitmapToImageSource(result); + + _ = Dispatcher.BeginInvoke(() => { RenderOptions.SetBitmapScalingMode(image, renderOptions); - image.Source = BitmapToImageSource(result); + image.Source = frozenSource; }); } }