调用MessageBox.Show致Blazor Hybrid调试时崩溃问题咨询
WPF Blazor Hybrid中调用WinForms消息框/模态窗体调试时崩溃问题
问题描述
使用System.Windows.Forms.MessageBox.Show打开消息框的WPF Blazor Hybrid应用,数秒后会崩溃。打开模态窗体时也会出现相同情况。
仅在使用Visual Studio调试器运行时会崩溃,不调试运行则不会崩溃。
Visual Studio调试输出
调试输出显示:
'WpfBlazorHybridMessageBoxTest.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.8\System.Windows.Forms.dll'. Symbols loaded. 'WpfBlazorHybridMessageBoxTest.exe' (CoreCLR: clrhost): Loaded 'C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\8.0.8\System.Windows.Forms.Primitives.dll'. The thread '.NET TP Worker' (25888) has exited with code 0 (0x0). The thread '.NET TP Worker' (45744) has exited with code 0 (0x0). The thread '.NET TP Worker' (57576) has exited with code 0 (0x0). The thread '.NET TP Worker' (22500) has exited with code 0 (0x0). The program '[24472] WpfBlazorHybridMessageBoxTest.exe: Program Trace' has exited with code 0 (0x0). The program '[24472] WpfBlazorHybridMessageBoxTest.exe' has exited with code 2147483651 (0x80000003).
退出代码0x80000003似乎与断点相关,但不确定。
事件查看器信息
事件查看器记录:
Faulting application name: WpfBlazorHybridMessageBoxTest.exe, version: 1.0.0.0, time stamp: 0x66960000 Faulting module name: EmbeddedBrowserWebView.dll, version: 129.0.2792.65, time stamp: 0x66f49609 Exception code: 0x80000003 Fault offset: 0x00000000003a84fd Faulting process id: 0x0x5F98 Faulting application start time: 0x0x1DB141109AE3F08 Faulting application path: F:\Test\WpfBlazorHybridMessageBoxTest\bin\Debug\net8.0-windows\WpfBlazorHybridMessageBoxTest.exe Faulting module path: C:\Program Files (x86)\Microsoft\EdgeWebView\Application\129.0.2792.65\EBWebView\x64\EmbeddedBrowserWebView.dll Report Id: bddefc72-2dec-40a6-8240-aebac0069299 Faulting package full name: Faulting package-relative application ID:
同时存在两条Windows错误报告条目。
重现步骤
- 按官方流程创建WPF Blazor Hybrid应用
- 在.csproj文件中添加属性启用WinForms支持:
<UseWindowsForms>true</UseWindowsForms> - 在
App.xaml.cs中显式指定命名空间解决Application歧义:public partial class App : System.Windows.Application - 在
Counter.razor中添加消息框调用:{ currentCount++; System.Windows.Forms.MessageBox.Show("Counter increased"); } - 在
Counter.razor中添加模态窗体调用:{ currentCount++; var f = new System.Windows.Forms.Form(); f.ShowDialog(); }
背景说明
我们有一个运行在.NET Framework 4.7.2上的大型WPF应用,原本使用IE浏览器控件渲染UI,所有浏览器事件处理、客户端逻辑都运行在.NET Framework中,是自行开发多年的IE与.NET混合架构应用,和Blazor Hybrid模式类似。现在计划迁移到Blazor Hybrid,但修改所有现有MessageBox调用及第三方模态窗体工作量极大,希望保留原有代码不变。
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

