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);
}
服务端
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# 模拟多线程下载文件的更多相关文章
- Python之FTP多线程下载文件之分块多线程文件合并
Python之FTP多线程下载文件之分块多线程文件合并 欢迎大家阅读Python之FTP多线程下载系列之二:Python之FTP多线程下载文件之分块多线程文件合并,本系列的第一篇:Python之FTP ...
- Python之FTP多线程下载文件之多线程分块下载文件
Python之FTP多线程下载文件之多线程分块下载文件 Python中的ftplib模块用于对FTP的相关操作,常见的如下载,上传等.使用python从FTP下载较大的文件时,往往比较耗时,如何提高从 ...
- 多线程下载文件,ftp文件服务器
1: 多线程下载文件 package com.li.multiplyThread; import org.apache.commons.lang3.exception.ExceptionUtils; ...
- 教你如何在 Android 使用多线程下载文件
# 教你如何在 Android 使用多线程下载文件 前言 在 Android 日常开发中,我们会经常遇到下载文件需求,这里我们也可以用系统自带的 api DownloadManager 来解决这个问题 ...
- java 多线程下载文件 以及URLConnection和HttpURLConnection的区别
使用 HttpURLConnection 实现多线程下载文件 注意GET大写//http public class MultiThreadDownload { public static void m ...
- java 多线程下载文件并实时计算下载百分比(断点续传)
多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...
- java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例
什么是IPV4,什么是IPV6: IPv4使用32个二进制位在网络上创建单个唯一地址.IPv4地址由四个数字表示,用点分隔.每个数字都是十进制(以10为基底)表示的八位二进制(以2为基底)数字,例如: ...
- AccessRandomFile多线程下载文件
写一个工具类 package com.pb.thread.demo; import java.io.File; import java.io.FileNotFoundException; import ...
- WPF多线程下载文件,有进度条
//打开对话框选择文件 private void OpenDialogBox_Click(object sender, RoutedEventArgs e) { ...
随机推荐
- 生成excel的时候要用双引号。。。。。
<?php header("Content-type:application/vnd.ms-excel"); header("Content-Disposition ...
- 皮卡丘检测器-CNN目标检测入门教程
目标检测通俗的来说是为了找到图像或者视频里的所有目标物体.在下面这张图中,两狗一猫的位置,包括它们所属的类(狗/猫),需要被正确的检测到. 所以和图像分类不同的地方在于,目标检测需要找到尽量多的目标物 ...
- Java - 18 Java Scanner 类
java.util.Scanner是Java5的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner ...
- swap空间不够导致安装失败解决方法
在安装Oracle的时候,可能因为我们分配的swap空间不够导致安装失败.处理步骤如下: SWAP空间为2G [root@linux01 oracle]# free total ...
- grep与egrep的区别
grep与egrep的区别: 在linux系统环境下,我们通常使用grep命令来过滤出需要的行而egrep确很少使用,他们的区别其实很简单,grep默认不支持正则表达式,egrep默认支持正则表达式, ...
- 【HQL】常用函数
CONCAT_WS(separator, str1, str2,...) 多列转1列,以分割符分割 使用场景: 1.多列在一列显示: 2.多列转多行作为辅助,结合split和explode使用 SEL ...
- uva-10341-二分法
题意:已知方程的根在0-1范围内,求解方程的根,如果方程不存在根,那就输出 no solution. 直接二分,保留四位小数. #include "pch.h" #include ...
- 0基础学习MySQL 之常用数据类型
原文地址 =========================================== 数据类型是定义列中可以存储什么数据以及该数据实际怎么存储的基本规则. Mysql的常用数据类型主要有: ...
- web.xml配置重理解
<context-param> <param-name>home-page</param-name> <param-value>home.jsp< ...
- Http协议基础知识
r equest POST https://re.csdn.net/csdnbi HTTP/1.1方法 url/uri 协议的版本号 1.1Host: re.csdn.netConnection: k ...