原地址: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. CS229 6.8 Neurons Networks implements of PCA ZCA and whitening

    PCA 给定一组二维数据,每列十一组样本,共45个样本点 -6.7644914e-01  -6.3089308e-01  -4.8915202e-01 ... -4.4722050e-01  -7.4 ...

  2. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  3. 【Jmeter自学】Jmeter性能测试(四)

    ==================================================================================================== ...

  4. 使用docker生成centos7系统

    因为缺乏系统,所以使用docker镜像模拟生成多个系统,用于练习集群的安装. 查看已有镜像 docker images 下载镜像: docker pull centos: docker pull  镜 ...

  5. BLOB TO CLOB

    CREATE OR REPLACE FUNCTION blob_to_clob (blob_in IN BLOB) RETURN CLOB AS v_clob CLOB; v_varchar VARC ...

  6. [转]C# 安装与部署

    部署 Windows 应用程序 本演练演示为启动记事本的 Windows 应用程序创建一个安装程序的过程.在本演练中,您将首先创建一个 Windows 应用程序,然后创建一个安装程序:以便在安装过程中 ...

  7. iOS跳转洁面时隐藏tabBar的方法

    //1.设置self.tabBarController.tabBar.hidden=YES;       self.tabBarController.tabBar.hidden=YES;   //2. ...

  8. 16.Mongodb安装

    Mongodb是由c++编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活. 1.相关链接: http ...

  9. Linux 配置开机自启 和 修改环境变量

    [ 操作系统 Centos7 ] 一,开机自动启动的配置 1,赋予 /etc/rc.local 的执行权限 => chmod +x /etc/rc.local 2,在 /etc/rc.local ...

  10. air报错 Error: Error #3000: Illegal path name

    配置增加: <supportedProfiles>extendedDesktop desktop</supportedProfiles> fb: flash: