首页 > 编程语言 >c#线程池使用之_回调方法中传递多个参数的处理

c#线程池使用之_回调方法中传递多个参数的处理

时间:2022-09-02 11:44:22浏览次数:79  
标签:string filePath c# Demo 参数 new 线程 path WebClientDown2

如题,在这里主要是做个关于线程池使用过程中回调方法需要用到多个参数的时候的场景

 下面中的代码做个例子:我需要用到一个WebClientDown2来去远程地址下载一个文件保存到本地.因为需要访问的次数过多(上十万+),所以打算用到线程池进行加快下载.WebClientDown2方法中接收2个参数path(远程下载地址),filePath(本地文件存放地址)

 ThreadPool.QueueUserWorkItem(new WaitCallback(WebClientDown2), new Demo { path = path, filePath = (filePath + "\\" + y + ".png") });

  因为QueueUserWorkItem方法中接收的参数一个时回调方法,一个是obj所以我在参考了网上的说法以后创建了一个内部类Demo进行存放参数.

public class Demo
{
public string path { get; set; }
public string filePath { get; set; }

}

WebClientDown2方法内通过强制转换的方式获取到传入的参数

  public static void WebClientDown2(object o)
        {
            Demo d = (Demo)o;
            string URLAddress = d.path;
            string path = d.filePath;
            WebClient client = new WebClient();
            Stream str = client.OpenRead(URLAddress);
            StreamReader reader = new StreamReader(str);
            byte[] mbyte = new byte[1000000];
            int allmybyte = (int)mbyte.Length;
            int startmbyte = 0;
 
            while (allmybyte > 0)
            {
 
                int m = str.Read(mbyte, startmbyte, allmybyte);
                if (m == 0)
                    break;
 
                startmbyte += m;
                allmybyte -= m;
            }
 
            reader.Dispose();
            str.Dispose();
 
            //  string path = receivePath + System.IO.Path.GetFileName(URLAddress);
            FileStream fstr = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
            fstr.Write(mbyte, 0, startmbyte);
            fstr.Flush();
            fstr.Close();
        }

当然大家也可以使用数组/集合的方式进行保存参数,不过我自己不知道怎么把obj重新转换为数组/集合.所以使用了内部类的方式进行的.大家如果知道还请告知一下.

以上内容来源于百科书,可以关注我了解更多.

 

 

标签:string,filePath,c#,Demo,参数,new,线程,path,WebClientDown2
From: https://www.cnblogs.com/sdjlq/p/16649295.html

相关文章

  • Windows wsl2 Alpine安装docker
    apkadd--no-cachedockeropenrclxcmusl-devopenrcmkdir-p/run/openrc/touch/run/openrc/softlevelservicedockerstartdockerps-a搞定!  参考:wsl2Alpin......
  • currenthashmap1.7
    ConcurrentHashMap采用了分段锁的设计,当需要put元素的时候,并不是对整个hashmap进行加锁,而是先通过hashcode来知道要放在哪一个分段中,然后对这个分段进行加锁,所以当多线程pu......
  • D. 2+ doors(构造 二分图) CF 1715D
    题目:​ 现在有一个长度为n的序列待构造,给出m对关系\(i,j,x\),表示\(a_i|a_j=x\),请在满足这m对关系的情况下构造出的最小字典序的序列。分析:​ 每当我们看到最小字典序的......
  • Html实现点击文字标签同时选中checkbox
    1.问题描述1.在开发过程中很常用的会实现记住密码功能,实现点击文字的时候选中复选框<divclass="rem"><inputid="checkbox"style="vertical-align:middle;......
  • LeetCode 35. 搜索插入位置
    题目题目链接:https://leetcode.cn/problems/search-insert-position/给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将......
  • NativeScript 入门
    NativeScript入门NativeScript是一个免费的开源框架,用于开发原生iOS和Android应用程序。这是一个JIT编译的框架。JS虚拟机用于运行NativeScript程序。它可以......
  • Mac安装nmap,运行脚本出现报错:AttributeError: module 'nmap' has no attribute 'PortS
    一、问题描述使用命令pip3installnmap之后执行python脚本,出现报错:AttributeError:module'nmap'hasnoattribute'PortScanner'。 二、问题解决流程1、首先......
  • Hybris Accelerator 的一些局限介绍和 Spartacus 项目的诞生
    很多做过SAPHybris实施的朋友,对于HybrisAccelerator都应该很熟悉了。HybrisAccelerator是一个即用型电子商务实现,客户可以快速安装和运行。由于其本身的模板特性,......
  • 内部类-多线程-静态代理
    内部类概念:一个类中定义另外一个类,那这个另外的类就是内部类分类:在类的成员位置:成员内部类(如果内部类被static修饰,则这个内部类称之为静态内部类)在......
  • 在 C# CLR 中学习 C++ 之了解 extern
    一:背景在CLR源码中有很多的extern和extern"C"这样的关键词,比如下面这些代码:externsize_tgc_global_mechanisms[MAX_GLOBAL_GC_MECHANISMS_COUNT];externDWO......