如何使用GeckoFX45获取C#上的下载文件百分比?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用GeckoFX45获取C#上的下载文件百分比?相关的知识,希望对你有一定的参考价值。

我在C#中使用GeckoFX45,我需要获得下载百分比才能显示进度条。现在我正在使用此代码:

private void LauncherDialog_Download(object sender, LauncherDialogEvent e)
{
    Stream myStream;
    SaveFileDialog saveDialog = new SaveFileDialog();
    saveDialog.Filter = "All files (*.*)|*.*";
    saveDialog.FileName = e.Filename;

    if (saveDialog.ShowDialog() == DialogResult.OK)
    {
        if ((myStream = saveDialog.OpenFile()) != null)
        {
            nsIURI source = ioservice.CreateNsIUri(e.Url);
            nsIURI dest = IOService.CreateNsIUri(new Uri(@saveDialog.FileName).AbsoluteUri);
            nsAStringBase t = (nsAStringBase)new nsAString(System.IO.Path.GetFileName(@saveDialog.FileName));
            nsIWebBrowserPersist persist = Xpcom.CreateInstance<nsIWebBrowserPersist>("@mozilla.org/embedding/browser/nsWebBrowserPersist;1");
            nsITransfer nst = Xpcom.CreateInstance<nsITransfer>("@mozilla.org/transfer;1");
            nst.Init(source, dest, t, e.Mime, 0, null, persist, false);
            if (nst != null)
            {
                persist.SetPersistFlagsAttribute(2 | 32 | 16384);
                persist.SetProgressListenerAttribute((nsIWebProgressListener)nst);
                persist.SaveURI(source, null, null, (uint)Gecko.nsIHttpChannelConsts.REFERRER_POLICY_NO_REFERRER, null, null, (nsISupports)dest, null);
            }
            myStream.Close();
        }
    }
}

任何的想法?

答案

我通过实现自己的nsITransfer来实现它:

nst = new TransferTest();

public class TransferTest : nsITransfer
{
  //[...]
  void nsIWebProgressListener2.OnProgressChange64(nsIWebProgress aWebProgress, nsIRequest aRequest, long aCurSelfProgress, long aMaxSelfProgress, long aCurTotalProgress, long aMaxTotalProgress)
  {
    Debug.WriteLine($"Progress: {aCurSelfProgress} / {aMaxSelfProgress}");
  }
}

在未来的版本中可能会有更好的方法,现在我们必须使用这个已弃用的功能。请参阅有关GeckoFX issue tracker的讨论

以上是关于如何使用GeckoFX45获取C#上的下载文件百分比?的主要内容,如果未能解决你的问题,请参考以下文章

黄聪:GeckoFX如何引用jquery文件并执行自定义JS

GeckoFX Source 获取 DOM / 隐藏的 div 元素

如何使用计数窗口函数获取百分比?

从android中的json get方法下载数据时使用百分比设置进度条

复制文件时显示进度百分比

GeckoFX ObjectForScripting,GeckoFX 下js调用c#方法