【问题标题】:WebView2 Download progressWebView2 下载进度
【发布时间】:2021-08-04 20:16:38
【问题描述】:

需要通过 WebView2 获取下载进度。 https://docs.microsoft.com/en-us/dotnet/api/microsoft.web.webview2.core.corewebview2downloadoperation?view=webview2-dotnet-1.0.865-prerelease

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;
  public event EventHandler<object> BytesReceivedChanged; <-- Need this event for print bytes to webView_BytesReceivedChanged
  public event EventHandler<object> StateChanged; <-- Need this event for print download state to webView_StateChanged
}

private void webView_BytesReceivedChanged(object sender, CoreWebView2DownloadStartingEventArgs e)
{
  Console.WriteLine(e.DownloadOperation.BytesReceived); // Bytes received
  Console.WriteLine(e.DownloadOperation.TotalBytesToReceive); // Total bytes to receive
}

private void webView_StateChanged(object sender, CoreWebView2DownloadStartingEventArgs e)
{
  Console.WriteLine(e.DownloadOperation.State); //2 Completed, 1 In progress, 0 Error
}

我试过了:

public event EventHandler BytesReceivedChanged;
BytesReceivedChanged += webView_BytesReceivedChanged;

但事件从未触发

【问题讨论】:

    标签: c# winforms download webview2


    【解决方案1】:

    注意(对于阅读本文的其他人):这需要版本“1.0.865-prerelease”或更高版本。首先订阅CoreWebView2.DownloadStartingevent。您可以在CoreWebView2InitializationCompletedeventhandler 中执行此操作,或如上所示。

    现在在CoreWebView2.DownloadStarting 事件处理程序中保存对CoreWebView2DownloadOperation 的引用并订阅BytesReceivedChangedEstimatedEndTimeChanged

    这是代码(假设您的 WebView2 被称为“webView21”):

    using Microsoft.Web.WebView2.Core;
    
    CoreWebView2DownloadOperation downloadOperation;
    
    private void WebView21_CoreWebView2InitializationCompleted(object sender, CoreWebView2InitializationCompletedEventArgs e)
    {
        webView21.CoreWebView2.DownloadStarting += CoreWebView2_DownloadStarting;
    }
    
    private void CoreWebView2_DownloadStarting(object sender, CoreWebView2DownloadStartingEventArgs e)
    {
        downloadOperation = e.DownloadOperation; // Store the 'DownloadOperation' for later use in events
        downloadOperation.BytesReceivedChanged += DownloadOperation_BytesReceivedChanged; // Subscribe to BytesReceivedChanged event
        downloadOperation.EstimatedEndTimeChanged += DownloadOperation_EstimatedEndTimeChanged; // Subsribe to EstimatedEndTimeChanged event
    }
    
    private void DownloadOperation_EstimatedEndTimeChanged(object sender, object e)
    {
        label1.Text = downloadOperation.EstimatedEndTime.ToString(); // Show the progress
    }
    
    private void DownloadOperation_BytesReceivedChanged(object sender, object e)
    {
        label2.Text = downloadOperation.BytesReceived.ToString(); // Show the progress
    }
    

    现在标签将显示进度。

    【讨论】:

    • 您的回答绝对精彩。奇迹般有效!非常感谢你的痛苦。 :-)
    猜你喜欢
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-27
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多