C# 模拟多线程下载文件

原地址: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}");
}

/// <summary>
/// 模拟下载资源
/// 不同Handler请求完成的时间不一样
/// Handler1.ashx 需要5秒
/// Handler2.ashx 需要10秒
/// </summary>
/// <param name="HandlerName"></param>
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值