wpf icon indicating copy to clipboard operation
wpf copied to clipboard

[Bug] In the WPF project with a SplashScreen, the first MessageBox.Show in the App's OnStartup method always fails

Open MNDIA opened this issue 1 year ago • 4 comments

Description

In the WPF project with a SplashScreen, the first MessageBox.Show in the App's OnStartup method always fails (the display disappears for 0.3 seconds or so and returns No, which does not block the thread). No matter how long it sleeps before that, It always fails the first time.

public partial class App
{
    private void OnStartup(object sender, StartupEventArgs e)
    {
        System.Threading.Thread.Sleep(15000); // No matter how long or 0, The SplashScreen stays displayed when sleeping
        //At this point the startup image starts to fade and disappear
        var result = System.Windows.MessageBox.Show("The first use always automatically disappears and returns No");
        Debug.WriteLine($"The first use always returns no test: {result}");
        var result2 = System.Windows.MessageBox.Show("Subsequent normal use test, click OK to close");
        Debug.WriteLine($"Subsequent normal use test: {result2}");
        var result3 = System.Windows.MessageBox.Show("Subsequent normal use test, click OK to close");
        Debug.WriteLine($"Subsequent normal use test: {result3}");

        System.Windows.MessageBox.Show("Blocking for log replication");
    }
}

debugging log:

“WpfApp1.exe”(CoreCLR: DefaultDomain): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Private.CoreLib.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Users\MNDIA\source\repos\WpfApp1\bin\Debug\net8.0-windows\WpfApp1.dll”。已加载符号。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.10\PresentationFramework.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.10\WindowsBase.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.10\System.Xaml.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“d:\coder\vs2022\common7\ide\commonextensions\microsoft\hotreload\Microsoft.Extensions.DotNetDeltaApplier.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.IO.Pipes.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Linq.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Collections.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Console.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.InteropServices.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.Overlapped.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Security.AccessControl.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Security.Principal.Windows.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Security.Claims.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.Loader.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“D:\Coder\VS2022\Common7\IDE\PrivateAssemblies\Runtime\Microsoft.VisualStudio.Debugger.Runtime.NetCoreApp.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\netstandard.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.ThreadPool.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Diagnostics.TraceSource.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Collections.Concurrent.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Text.RegularExpressions.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Memory.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\Microsoft.Win32.Primitives.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\Microsoft.Win32.Registry.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Collections.Specialized.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.10\zh-Hans\WindowsBase.resources.dll”。模块已生成,不包含符号。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ComponentModel.Primitives.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.Thread.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.10\System.Configuration.ConfigurationManager.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Private.Uri.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Xml.ReaderWriter.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Private.Xml.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Net.WebClient.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Text.Encoding.Extensions.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
单步执行: 正在逐过程执行非用户代码“WpfApp1.App..ctor”
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.10\System.IO.Packaging.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.10\PresentationCore.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.10\DirectWriteForwarder.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.Extensions.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Diagnostics.Debug.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.CompilerServices.VisualC.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“d:\coder\vs2022\common7\ide\commonextensions\microsoft\xamldiagnostics\Core\x64\Microsoft.VisualStudio.DesignTools.WpfTap.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Diagnostics.Tracing.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Collections.NonGeneric.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Threading.Tasks.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
单步执行: 正在逐过程执行非用户代码“WpfApp1.App.InitializeComponent”
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ObjectModel.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ComponentModel.TypeConverter.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.ComponentModel.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.Serialization.Json.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Private.DataContractSerialization.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.Serialization.Xml.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Runtime.Serialization.Primitives.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Resources.ResourceManager.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Reflection.Emit.ILGeneration.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Reflection.Emit.Lightweight.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Reflection.Primitives.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
线程 '[线程已销毁]' (6096) 已退出,返回值为 0 (0x0)。
“WpfApp1.exe”(CoreCLR: clrhost): 已加载“C:\Program Files\dotnet\shared\Microsoft.NETCore.App\8.0.10\System.Diagnostics.Process.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
The first use always returns no test: No
线程 '[线程已销毁]' (17268) 已退出,返回值为 0 (0x0)。
线程 '[线程已销毁]' (6004) 已退出,返回值为 0 (0x0)。
线程 '[线程已销毁]' (11372) 已退出,返回值为 0 (0x0)。
线程 '[线程已销毁]' (29948) 已退出,返回值为 0 (0x0)。
Subsequent normal use test: OK
Subsequent normal use test: OK

Reproduction Steps

New WPF Project with .NET 8.0 Using OnStartup in App.xaml

Expected behavior

The first messagebox should block the threads

Actual behavior

In the WPF project with a SplashScreen, the first MessageBox.Show in the App's OnStartup method always fails (the display disappears for 0.3 seconds or so and returns No, which does not block the thread). This does not convey interactive information

Regression?

.NET CORE3.1 does not have a SplashScreen.

Known Workarounds

No response

Impact

No response

Configuration

No response

Other information

No response

MNDIA avatar Nov 13 '24 16:11 MNDIA

@MNDIA Could you upload the code project, and I can not repro your issues.

能否有完整的代码项目上传一下?我没有复现你的问题哦(或者说其实我没理解到你的问题)。另外,我还有一个问题,为什么想要在 OnStartup 里面弹出东西?就是先于任何一个窗口之前弹出,这时候你没有 WPF 意义上的主窗口哦

lindexi avatar Nov 16 '24 08:11 lindexi

I am also experiencing this exact issue. It seems to work fine if I'm attached with a debugger and using a breakpoint in the OnStartup method, but without any breakpoints it's not a blocking call and it goes right past.

Code: https://github.com/wabbajack-tools/wabbajack/blob/f8cb190b284dd3d93299d8bbaeafd1541693c00e/Wabbajack.App.Wpf/App.xaml.cs#L117

tr4wzified avatar Feb 22 '25 20:02 tr4wzified

Sorry, It is the override modifier, which was missing in the previous handwriting Anyway the new little project packaging file is here

WpfException.zip @lindexi Here's how the program came about:

  1. New project WPF in .NET9, keep the defaults
  2. App class write code, App class complete code as follows
  3. Add SplashScreen file to the project, keeping the defaults.
  4. At this point run the program can reproduce the problem.
using System.Configuration;
using System.Data;
using System.Windows;

namespace WpfException;
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);//It doesn't matter what line this code is executed

        System.Threading.Thread.Sleep(1000); // No matter how long or 0, The SplashScreen stays displayed when sleeping

        ;//At this line the startup image starts to fade and disappear

        var result = System.Windows.MessageBox.Show("The first use always automatically disappears and returns No");
        var result2 = System.Windows.MessageBox.Show("Subsequent normal use test, click OK to close");
        var result3 = System.Windows.MessageBox.Show("Subsequent normal use test, click OK to close");

        System.Windows.MessageBox.Show("Blocking for log replication,results is\n"
            + result + " " + result2 + " " + result3);//you will see the first messagebox is No
        //You can set the project to **.NET6 7 8 9** to the latest(April 24, 2025) and the problem is always there
    }
}


MNDIA avatar Apr 24 '25 14:04 MNDIA

I am also experiencing this exact issue. It displaces the first message box for 0.3 seconds and then works OK. If I remove the splash screens the first message will than work OK. I Experience this issue years pass and is experiencing it now. But did not know it is related to the splash screen. I reported it to Microsoft, but they said not enough people experiencing this problem. I appreciate the fact that you found out that it's related to the splash screen. However, I do have some code in the OnStartup method.... but my Message boxes are outside the OnStartup method.

kwcoffee1 avatar Jul 10 '25 10:07 kwcoffee1

One more small fact, my message box is in a Prism event subscribe handler

kwcoffee1 avatar Jul 10 '25 10:07 kwcoffee1

@kwcoffee1 How about use the win32 splash screen, see https://github.com/dotnet/wpf/issues/2031

lindexi avatar Jul 10 '25 11:07 lindexi

I'm not sure on how to use the 32-bit splash image API (per #2031 message). The following code is the code I wish to replace:

SplashScreen splashScreen = new("Resources/MyImage.jpg"); splashScreen.Show(true, true);

I loaded the project as a library API, but I do not see any callable API methods.

kwcoffee1 avatar Jul 10 '25 20:07 kwcoffee1

The problem appears to be with the auto close feature of the splash screen. If I set the auto close to false, the first iteration of the message box works OK. But if I set auto close the true, the splash screen and the first iteration of the message box both get closed.

kwcoffee1 avatar Jul 10 '25 21:07 kwcoffee1

I loaded the project as a library API, but I do not see any callable API methods.

@kwcoffee1 It is the demo project. You can easy to modify the code to adapt your project.

lindexi avatar Jul 11 '25 00:07 lindexi

Thank you for your time and effort. But the demo project doesn't do anything when I run it and it's not clearly decipherable. I'm looking a simple API method to replace the .NET 8.0 class SplashScreen with a simple implementation like the DotNet call:

SplashScreen splashScreen = new("Resources/MyImage.jpg"); splashScreen.Show(true, true);

Again, Thanks

kwcoffee1 avatar Jul 11 '25 21:07 kwcoffee1

@kwcoffee1

I upload all my code in: https://github.com/lindexi/lindexi_gd/tree/5a78c672047439cd2dc42d89f1a86b63f7991e60/Workbench/WerekehagaiJerhalcafall

You can use the commandline to fetch my code. Frist, you should create an empty folder and set it as the WorkingDirectory of cmd, such as cd xxx. And then, you can use the code to fetch my code.

git init
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 5a78c672047439cd2dc42d89f1a86b63f7991e60

After you pull the code, and you can find the SplashScreensLib in Workbench\WerekehagaiJerhalcafall\SplashScreensLib folder.

Feel free to let me know, what's the problem do you think?

lindexi avatar Jul 14 '25 01:07 lindexi

This happens because the owner window of the MessageBox is the splash screen. The splash screen is set up to close as soon as another window is open (even if it is your new MessageBox), and when the splash screen window is closed, the MessageBox will also be closed as one of its children.

There are some more details on this StackOverflow question as well as some workarounds, but the simplest workaround IMO is to create a temporary hidden window and set that as the parent of the message box.

mark-monteiro avatar Aug 25 '25 20:08 mark-monteiro

@mark-monteiro The other solution is implement SplashScreens by yourself, see https://github.com/dotnet/wpf/issues/10067#issuecomment-3057050842 and https://github.com/dotnet/wpf/issues/10067#issuecomment-3067503436

lindexi avatar Aug 26 '25 00:08 lindexi