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

如何在WPF窗口退出时终止后台运行的WebView2?

解决WPF窗口退出时终止WebView2并发送退出消息的问题

要解决直接关闭窗口时WebView2后台运行、服务器未收到退出消息的问题,你可以通过重写窗口的OnClosing方法,统一处理退出逻辑:

核心思路

  • 拦截窗口关闭事件,先发送leaveRoom消息给服务器
  • 确保消息发送完成后,销毁WebView2的核心实例,终止后台进程
  • 最后允许窗口正常关闭

修改后的代码实现

public Webcam()
{
    InitializeComponent();
}

protected override async void OnContentRendered(EventArgs e)
{
    base.OnContentRendered(e);
    try
    {
        var webView2Environment = await CoreWebView2Environment.CreateAsync();
        await webView.EnsureCoreWebView2Async(webView2Environment);
        webView.CoreWebView2.Navigate("ServerIP");

        webView.CoreWebView2.NavigationCompleted += CoreWebView2_NavigationCompleted;
    }
    catch (Exception exception)
    {
        // 建议添加异常日志,方便排查问题
    }
}

private void CoreWebView2_NavigationCompleted(object? sender, Microsoft.Web.WebView2.Core.CoreWebView2NavigationCompletedEventArgs e)
{
    string test = "UserID";
    webView.CoreWebView2.PostWebMessageAsString(test);
}

// 重写窗口关闭逻辑
protected override async void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    base.OnClosing(e);
    
    // 确保WebView2已初始化
    if (webView.CoreWebView2 != null)
    {
        // 先取消默认关闭流程,处理退出逻辑
        e.Cancel = true;
        
        // 发送leaveRoom消息给服务器
        webView.CoreWebView2.PostWebMessageAsString("leaveRoom");
        
        // 短时间等待,确保消息发送完成(时长可根据实际网络情况调整)
        await Task.Delay(300);
        
        // 销毁CoreWebView2实例,释放资源并终止后台进程
        webView.CoreWebView2.Dispose();
        webView.Dispose();
    }
    
    // 允许窗口关闭
    e.Cancel = false;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    // 直接调用窗口关闭,统一走OnClosing的处理逻辑
    this.Close();
}

关键说明

  • OnClosing方法会在窗口关闭(无论是点击按钮还是右上角关闭)时触发,确保退出逻辑统一执行
  • 使用Task.Delay是简单的等待消息发送完成的方式,如果你的JS代码有退出确认回调,可以改成等待回调完成,这样更可靠
  • 调用CoreWebView2.Dispose()会彻底终止WebView2的后台进程,避免其继续运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:30:58