You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:52:56