c#线程池使用之_回调方法中传递多个参数的处理
如题,在这里主要是做个关于线程池使用过程中回调方法需要用到多个参数的时候的场景
下面中的代码做个例子:我需要用到一个WebClientDown2来去远程地址下载一个文件保存到本地.因为需要访问的次数过多(上十万+),所以打算用到线程池进行加快下载.WebClientDown2方法中接收2个参数path(远程下载地址),filePath(本地文件存放地址)
1 | 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重新转换为数组/集合.所以使用了内部类的方式进行的.大家如果知道还请告知一下.
以上内容来源于百科书,可以关注我了解更多.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了