博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 模拟多线程下载文件
阅读量:7213 次
发布时间:2019-06-29

本文共 2673 字,大约阅读时间需要 8 分钟。

原地址:http://www.cnblogs.com/Opiece/p/4803836.html

 

客户端

public static string strContent = "";//用于存储时间信息private void button1_Click(object sender, EventArgs e){    //在实际的开发中,当不需要对线程进行操作的话,不要手动去创建线程,尽量的使用线程池技术去创建开启一个线程,    //可以提高线程的使用效率,使用线程池技术也可以提高应用程序的效率。    strContent += $"开始时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\r\n";    Task.Factory.StartNew(() => {        loadData("Handler1.ashx");        strContent += $"线程1完成时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\r\n";    });    Task.Factory.StartNew(() => {        loadData("Handler2.ashx");        strContent += $"线程2完成时间:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\r\n";    });    //使用工厂创建一个工作任务项,并执行了    //Task t1 = Task.Factory.StartNew(() => {    //    //执行代码    //    Thread.Sleep(2000);    //    MessageBox.Show("当前的线程是:" + Thread.CurrentThread.ManagedThreadId);    //});    //Task t1 = new Task(() =>    //    {    //        Thread.Sleep(2000);    //        MessageBox.Show("当前的线程是:" + Thread.CurrentThread.ManagedThreadId);    //    });    //t1.Start();                //MessageBox.Show(response);}               private void button2_Click(object sender, EventArgs e){    MessageBox.Show($"消息:{strContent}");}/// /// 模拟下载资源/// 不同Handler请求完成的时间不一样/// Handler1.ashx 需要5秒/// Handler2.ashx 需要10秒/// /// public void loadData(string HandlerName){    WebClient wc = new WebClient();    string strUrlPara = "{\"action\":\"mobileLogin\",\"did\":147,\"param\":{\"uid\":\"全角色syf\",\"loginType\":2,\"pwd\":\"\"},\"sid\":\"358240051111110\",\"timestamp\":null,\"token\":null}";    strUrlPara = HttpUtility.UrlEncode(strUrlPara);    byte[] data = new ASCIIEncoding().GetBytes(strUrlPara);    byte[] responseArray = wc.UploadData($"http://localhost:37443/{HandlerName}", data);    var response = Encoding.UTF8.GetString(responseArray);}
View Code

 

服务端

public class Handler1 : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            System.Threading.Thread.Sleep(5 * 1000);            context.Response.ContentType = "text/plain";            context.Response.Write("Hello World");        }        public bool IsReusable        {            get            {                return false;            }        }    }
View Code
public class Handler2 : IHttpHandler    {        public void ProcessRequest(HttpContext context)        {            System.Threading.Thread.Sleep(10 * 1000);            context.Response.ContentType = "text/plain";            context.Response.Write("Hello World");        }        public bool IsReusable        {            get            {                return false;            }        }    }
View Code

 

转载于:https://www.cnblogs.com/guxingy/p/9448691.html

你可能感兴趣的文章
logger异常日志要点总结
查看>>
chrony软件使用说明
查看>>
SetWindowHookEx 做消息响应
查看>>
数据库事务的四个隔离级别
查看>>
Elasticsearch——利用Parent-Child关系解决大数据场景下的实时查询
查看>>
pyMagic:用python控制的Geek入门神器
查看>>
ubuntu for win10 里运行apache+php
查看>>
在线 Python运行工具
查看>>
云上的数据安全,是企业互联网化发展的生命线!
查看>>
应变界的翘楚:硅基谐振式传感器灵敏度非常高
查看>>
Lean WM在交货中的应用[翻译]
查看>>
dataguard备库的数据文件的迁移
查看>>
《Oracle DBA工作笔记》第一章
查看>>
26.3. 促销优惠组件设计
查看>>
java.lang.ClassNotFoundException: javax.servlet.Filter
查看>>
有关 input默认宽度
查看>>
无惧杀入红海市场 ZUK手机底气在哪?
查看>>
Dom4j SAXReader Constructors
查看>>
再谈拍照,OPPO这次拿什么和iPhone7拼?
查看>>
[20161128]关于Little Enddian.txt
查看>>