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

如何通过WebView2获取下载进度?BytesReceivedChanged事件不触发如何解决

问题解决方法

核心问题是你错误尝试自行声明下载进度相关事件,且未正确绑定WebView2内置的下载状态变更事件,才会导致事件无法触发,可按照以下规则修正:

  • 不要在代码中自行定义BytesReceivedChanged、StateChanged事件,这两个是CoreWebView2DownloadOperation类的原生内置事件
  • 在DownloadStarting事件触发时,从参数中获取当前下载任务的DownloadOperation实例,再给这个实例绑定对应的进度、状态变更事件
  • 修正事件处理方法的参数类型,两个变更事件的发送者sender本身就是当前的CoreWebView2DownloadOperation实例

修正后的完整可运行代码如下:

async void InitializeAsync()
{
    var env = await CoreWebView2Environment.CreateAsync(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Microsoft\EdgeCore\92.0.887.0");
    await webView.EnsureCoreWebView2Async(env);
    webView.CoreWebView2.DownloadStarting += webView_DownloadStarting;
    webView.CoreWebView2.Navigate("downloadURL");
}

private void webView_DownloadStarting(object sender, CoreWebView2DownloadStartingEventArgs e)
{           
    e.ResultFilePath = filename;
    // 拿到当前下载任务实例,绑定内置事件
    var downloadOp = e.DownloadOperation;
    downloadOp.BytesReceivedChanged += webView_BytesReceivedChanged;
    downloadOp.StateChanged += webView_StateChanged;
}

private void webView_BytesReceivedChanged(object sender, object e)
{
    // sender就是当前的下载任务实例
    var downloadOp = sender as CoreWebView2DownloadOperation;
    Console.WriteLine(downloadOp.BytesReceived); // 已接收字节数
    Console.WriteLine(downloadOp.TotalBytesToReceive); // 待接收总字节数
}

private void webView_StateChanged(object sender, object e)
{
    var downloadOp = sender as CoreWebView2DownloadOperation;
    Console.WriteLine(downloadOp.State); // 2=已完成,1=进行中,0=出错
    // 下载结束(完成/失败/取消)后取消事件绑定,避免内存泄漏
    if (downloadOp.State != CoreWebView2DownloadState.InProgress)
    {
        downloadOp.BytesReceivedChanged -= webView_BytesReceivedChanged;
        downloadOp.StateChanged -= webView_StateChanged;
    }
}

额外注意:你使用的WebView2版本要对应,低于1.0.865的预览版不支持上述下载相关API;路径里的EdgeCore版本要和你实际安装的WebView2运行时版本匹配,否则初始化会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 19:45:11