Microsoft WebView2启动崩溃问题求助
WebView2控件初始化崩溃问题解决
你的代码问题出在WebView2控件尚未完成核心初始化就直接设置了Source。WebView2需要先完成CoreWebView2对象的初始化,才能进行加载URL、调用脚本等操作,直接在Form构造函数里设置Source会触发COM异常。
修正方案
方法1:监听CoreWebView2InitializationCompleted事件
修改代码,先完成控件初始化,再在事件回调中设置Source:
public Form1() { InitializeComponent(); WebView = new WebView2(); ((ISupportInitialize)WebView).BeginInit(); WebView.Dock = DockStyle.Fill; Controls.Add(WebView); // 绑定初始化完成事件 WebView.CoreWebView2InitializationCompleted += WebView_CoreWebView2InitializationCompleted; ((ISupportInitialize)WebView).EndInit(); } private void WebView_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e) { if (e.IsSuccess) { // 初始化成功后再设置Source WebView.Source = new Uri("https://www.microsoft.com"); // 这里可以添加脚本调用等后续操作,比如: // WebView.CoreWebView2.AddScriptToExecuteOnDocumentCreatedAsync("console.log('WebView2 initialized')"); } else { // 处理初始化失败的情况 MessageBox.Show($"WebView2初始化失败: {e.InitializationException.Message}"); } }
方法2:使用EnsureCoreWebView2Async异步初始化
如果你的项目支持异步代码,可以在Form的Load事件中异步初始化:
public Form1() { InitializeComponent(); this.Load += Form1_Load; } private async void Form1_Load(object sender, EventArgs e) { WebView = new WebView2(); WebView.Dock = DockStyle.Fill; Controls.Add(WebView); // 异步等待CoreWebView2初始化完成 await WebView.EnsureCoreWebView2Async(null); // 初始化完成后设置Source WebView.Source = new Uri("https://www.microsoft.com"); }
额外检查项
- 确认已安装Microsoft Edge WebView2 Runtime,如果没有安装,控件无法正常初始化。
- 检查NuGet包版本:确保
Microsoft.Web.WebView2包的版本和WebView2 Runtime版本兼容。 - 项目目标框架:WebView2要求.NET Framework 4.6.2及以上,或者.NET 5/6/7等现代.NET版本。
内容的提问来源于stack exchange,提问作者Nigel Tunnicliffe
相关产品推荐
相关产品推荐

