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

服务端

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

C# 模拟多线程下载文件的更多相关文章

  1. Python之FTP多线程下载文件之分块多线程文件合并

    Python之FTP多线程下载文件之分块多线程文件合并 欢迎大家阅读Python之FTP多线程下载系列之二:Python之FTP多线程下载文件之分块多线程文件合并,本系列的第一篇:Python之FTP ...

  2. Python之FTP多线程下载文件之多线程分块下载文件

    Python之FTP多线程下载文件之多线程分块下载文件 Python中的ftplib模块用于对FTP的相关操作,常见的如下载,上传等.使用python从FTP下载较大的文件时,往往比较耗时,如何提高从 ...

  3. 多线程下载文件,ftp文件服务器

    1: 多线程下载文件 package com.li.multiplyThread; import org.apache.commons.lang3.exception.ExceptionUtils; ...

  4. 教你如何在 Android 使用多线程下载文件

    # 教你如何在 Android 使用多线程下载文件 前言 在 Android 日常开发中,我们会经常遇到下载文件需求,这里我们也可以用系统自带的 api DownloadManager 来解决这个问题 ...

  5. java 多线程下载文件 以及URLConnection和HttpURLConnection的区别

    使用 HttpURLConnection 实现多线程下载文件 注意GET大写//http public class MultiThreadDownload { public static void m ...

  6. java 多线程下载文件并实时计算下载百分比(断点续传)

    多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...

  7. java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例

    什么是IPV4,什么是IPV6: IPv4使用32个二进制位在网络上创建单个唯一地址.IPv4地址由四个数字表示,用点分隔.每个数字都是十进制(以10为基底)表示的八位二进制(以2为基底)数字,例如: ...

  8. AccessRandomFile多线程下载文件

    写一个工具类 package com.pb.thread.demo; import java.io.File; import java.io.FileNotFoundException; import ...

  9. WPF多线程下载文件,有进度条

    //打开对话框选择文件         private void OpenDialogBox_Click(object sender, RoutedEventArgs e)         {     ...

随机推荐

  1. tomcat安全加固和规范

    tomcat是一个开源Web服务器,基于Tomcat的Web运行效率高,可以在一般的硬件平台上流畅运行,因此,颇受Web站长的青睐.不过,在默认配置下其存在一定的安全隐患,可被恶意攻击.以下是一些安全 ...

  2. windows下安装tomcat8

    1.下载tomcat,下载地址:https://tomcat.apache.org/download-80.cgi 2.官网下载下来的tomcat是zip格式,解压到安装目录 3.修改环境变量: CA ...

  3. 02-spark sql

    1.概念 Spark SQL是一个用来处理结构化数据的Spark组件. 优点:  ①SparkSQL是一个SQL解析引擎,将SQL解析成特殊的RDD(DataFrame),然后在Spark集群中运行 ...

  4. django---单表操作之展示书籍列表

    下面使用python console对数据库进行增删改查 下面我们来举个例子在页面上展示记录 结果: 注意html里面变量的写法 {% for book in book_list %} <tr& ...

  5. 【Python爬虫实战】pywin32 安装后出现 import win32api ImportError DLL load failed

    windows下执行 scrapy 的指定的时候出现错误, 最初出现错误  提示没有pywin32  那么就去安装了一个pywin32  然后pip安装 https://www.lfd.uci.edu ...

  6. Cannot run Eclipse; JVM terminated. Exit code=13

    在myeclipse 上运行好好的, 在 eclipse 上就运行不了了. 运行eclipse.exe 就出现: Cannot run Eclipse; JVM terminated. Exit co ...

  7. kubernetes之deployment滚动升级

    参考:https://blog.51cto.com/wutengfei/2116663 创建和管理多个Pod--Deployment Deployment 为 Pod 和 ReplicaSet 提供了 ...

  8. 登录之md5加密

    语句: password = hex_md5(password); 引入js文件: md5.js: /* * A JavaScript implementation of the RSA Data S ...

  9. Asp.Net前台调用后台变量

    1.Asp.Net中几种相似的标记符号: < %=...%>< %#... %>< % %>< %@ %>解释及用法 答: < %#... %&g ...

  10. 04.给linux用户添加sudo权限

    linux给用户添加sudo权限: 有时候,linux下面运行sudo命令,会提示类似: xxxis not in the sudoers file.  This incident will be r ...