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

WinUI3 C#浏览器开发:CoreWebView2.NewWindowRequested空引用异常排查

WinUI 3 C# WebView2 NewWindowRequested 空引用异常原因及解决

我正在使用WinUI 3 C#开发浏览器应用,发现触发新标签页请求时会打开新的Edge窗口,因此编写了处理该事件的WebView_NewWindowRequested方法:

public static void WebView_NewWindowRequested(CoreWebView2 sender, CoreWebView2NewWindowRequestedEventArgs e) {
    MainWindow.NewTab(new(e.Uri));
}

随后通过以下代码绑定事件:

Variables.webViews[index].CoreWebView2.NewWindowRequested += WebView_NewWindowRequested;

但运行时抛出System.NullReferenceException异常:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

而绑定NavigationStarting、NavigationCompleted事件的类似代码却能正常运行:

Variables.webViews[index].NavigationStarting += WebView_NavigationStarting;
Variables.webViews[index].NavigationCompleted += WebView_NavigationCompleted;

异常原因

核心问题是**CoreWebView2实例未完成初始化就被访问**。

NavigationStarting、NavigationCompleted是WebView2控件本身的事件,无需依赖CoreWebView2对象即可绑定;但NewWindowRequested是CoreWebView2专属的事件,必须等CoreWebView2完成初始化后才能访问它的成员。

WinUI 3中WebView2的CoreWebView2属性默认是null,只有在控件完成初始化(比如主动调用EnsureCoreWebView2Async(),或者控件自动加载完成)后,该属性才会被赋值。直接提前访问自然会触发空引用异常。

解决方法

方法一:主动确保CoreWebView2初始化

先调用EnsureCoreWebView2Async()等待初始化完成,再绑定事件:

await Variables.webViews[index].EnsureCoreWebView2Async();
Variables.webViews[index].CoreWebView2.NewWindowRequested += WebView_NewWindowRequested;

方法二:监听CoreWebView2Initialized事件

通过CoreWebView2Initialized事件判断初始化完成时机,在事件回调中绑定目标事件:

Variables.webViews[index].CoreWebView2Initialized += (sender, args) => {
    var webView = (WebView2)sender;
    webView.CoreWebView2.NewWindowRequested += WebView_NewWindowRequested;
};

内容的提问来源于stack exchange,提问作者user21603351

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 16:24:57