zoukankan      html  css  js  c++  java
  • 【C#】往异步下载的方法传递自定义完成事件

    封装自定义的异步下载方法时,正常情况下是这样的:

    /// <summary>
    /// 异步方法:联网下载文件,保存到本地。
    /// </summary>
    /// <param name="uri">资源的网络地址</param>
    /// <param name="fileName">保存到本地的地址、文件名、后缀格式</param>
    public static void DownloadFileTaskAsync(string uri, string fileName)
    {
        using (WebClient client = new WebClient())
        {
            client.DownloadFileAsync(new Uri(uri), fileName);
            client.DownloadFileCompleted += Client_DownloadFileCompleted;
        }
    }
    
    private static void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {
        throw new NotImplementedException();
    }

    但是有的时候,这个方法会被多处调用,而不同的调用者希望下载完成后的回调中执行不同的操作。这就要求将自定义下载完成的事件作为参数传递进来,让不同的调用者各自处理自己下载完成后的逻辑。

    可以改写成这样:

    /// <summary>
    /// 异步方法:联网下载文件,保存到本地。
    /// </summary>
    /// <param name="uri">资源的网络地址</param>
    /// <param name="fileName">保存到本地的地址、文件名、后缀格式</param>
    public static void DownloadFileTaskAsync(string uri, string fileName, AsyncCompletedEventHandler Client_DownloadFileCompleted)
    {
        using (WebClient client = new WebClient())
        {
            client.DownloadFileAsync(new Uri(uri), fileName);
            client.DownloadFileCompleted += Client_DownloadFileCompleted;
        }
    }

    参数Client_DownloadFileCompleted的具体内容由调用者自行决定。

    写法:
    VS中在client.DownloadFileCompleted身上按F12可以看到这个event的具体类型,然后才能准备一个这个类型的参数。直接传参event类型会报错无法类型隐式转换。

  • 相关阅读:
    jsp获取当前目录下的文件和目录,获取windows盘符
    WAS常用配置的文件
    Was提示SOAP链接不上可能停止 但WAS已经启动
    git本地仓库提交到远程
    ubuntu1804时间相差8小时
    docker安装&卸载
    ubuntu 安装离线字典
    写给还没入门的网页设计师们
    简单10步,建立一个完美的商业网站
    不会配色?来看看网页设计中怎样使用柔和色调
  • 原文地址:https://www.cnblogs.com/guxin/p/csharp-async-download-complete-callback.html
Copyright © 2011-2022 走看看