c# multi-ply download ui

first neet add an user control "DownloadBar":
/*
- Created by SharpDevelop.
- User: gwang
- Date: 2016/8/25
- Time: 14:01
- To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace testHttp
{
///
/// Description of DownloadBar.
///
public partial class DownloadBar : UserControl
{
public DownloadBar()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
Anchor=AnchorStyles.Left|AnchorStyles.Right;
// Width=Parent.Width -40;
Height=65;
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
public DownloadBar(DownLoadInfo info)
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
MinimumSize= new Size(126,66);
this.info=info;
btn1.Text=""+info.title +info.uid;
btn1.Visible=false;
lb1.Visible=true ;
if (info.ProgressPercentage<100){
lb1.Visible=true;
lb1.Text=info.ProgressPercentage+"%";
}
t = new Timer();
t.Tick+=t_tick;
t.Start ();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//Anchor=AnchorStyles.Left|AnchorStyles.Right;
// this.Size = new System.Drawing.Size(274, 65);
this.Size = new System.Drawing.Size(Parent.Width-20, 65);
this.ResumeLayout(false);
}
Timer t;
DownLoadInfo info;
void t_tick(object sender, EventArgs e){
if(info.ProgressPercentage>=100 || info.isCompleted )
{
//lb1.Visible=false;
t.Stop();
btn1.Visible=true ;
lb1.Visible=false;
}
lb1.Text=info.ProgressPercentage+"%";
lb1.Width=(int )( Width* ((double )info.ProgressPercentage * 0.01d));
}
void Btn1Click(object sender, EventArgs e)
{
MessageBox.Show(info.title );
}
}
}
---------partial class for ui InitializeComponent------------------------
/*
Created by SharpDevelop.
User: gwang
Date: 2016/8/25
Time: 14:01
To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
namespace testHttp
{
partial class DownloadBar
{
///
/// Designer variable used to keep track of non-visual components.
///private System.ComponentModel.IContainer components = null;
private System.Windows.Forms.Label lb1;
private System.Windows.Forms.Button btn1;/// <summary>
/// Disposes resources used by the control.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing) {
if (components != null) {
components.Dispose();
}
}
base.Dispose(disposing);
} /// <summary>
/// This method is required for Windows Forms designer support.
/// Do not change the method contents inside the source code editor. The Forms designer might
/// not be able to load this method if it was changed manually.
/// </summary>
private void InitializeComponent()
{
this.lb1 = new System.Windows.Forms.Label();
this.btn1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// lb1
//
this.lb1.BackColor = System.Drawing.Color.DodgerBlue;
this.lb1.Dock = System.Windows.Forms.DockStyle.Left;
this.lb1.Location = new System.Drawing.Point(0, 0);
this.lb1.Name = "lb1";
this.lb1.Size = new System.Drawing.Size(55, 65);
this.lb1.TabIndex = 0;
this.lb1.Text = "10%";
this.lb1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// btn1
//
this.btn1.Dock = System.Windows.Forms.DockStyle.Fill;
this.btn1.Location = new System.Drawing.Point(0, 0);
this.btn1.Name = "btn1";
this.btn1.Size = new System.Drawing.Size(274, 65);
this.btn1.TabIndex = 1;
this.btn1.UseVisualStyleBackColor = true;
this.btn1.Click += new System.EventHandler(this.Btn1Click);
//
// DownloadBar
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.LightSteelBlue;
this.Controls.Add(this.lb1);
this.Controls.Add(this.btn1);
this.Name = "DownloadBar";
this.Size = new System.Drawing.Size(274, 65);
this.ResumeLayout(false); }
}
}
2 main ui form code behind "FrmDownload":
/*
- Created by SharpDevelop.
- User: gwang
- Date: 2016/8/25
- Time: 14:34
- To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Drawing;
using System.Windows.Forms;
namespace testHttp
{
///
/// Description of FrmDownload.
///
public partial class FrmDownload : Form
{
public FrmDownload()
{
//
// The InitializeComponent() call is required for Windows Forms designer support.
//
InitializeComponent();
//
// TODO: Add constructor code after the InitializeComponent() call.
//
}
int uid=1;
void Button1Click(object sender, EventArgs e)
{
DownLoadInfo info = new DownLoadInfo();
info.url="http://sw.bos.baidu.com/sw-search-sp/av_aladdin/a997f8c5c22/rj_hb1174.exe";
info.title="test it "+ uid ;
info.uid=""+uid ;
HttpUtils.downloadFile(info);
uid++;
this.flowLayoutPanel1.Controls.Add(new DownloadBar(info));
Text="there "+ this.flowLayoutPanel1.Controls.Count +" downloading.........";
}
}
}
oh... first need define util class "HttpUtils"
/*
Created by SharpDevelop.
User: gwang
Date: 2016/8/24
Time: 17:23
To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Net;
using System.ComponentModel;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
namespace testHttp
{
///
/// Description of HttpUtils.
///public class HttpUtils
{
public HttpUtils()
{} public static List<DownLoadInfo> listDownloadInfo= new List<DownLoadInfo>(); public static void downloadFile(DownLoadInfo info){ if(listDownloadInfo.Count (n=> n.uid==info.uid )>0)
{ return;
} listDownloadInfo.Add(info);
WebClient wc=new WebClient();
wc.DownloadProgressChanged+= wc_DownloadProgressChanged;
wc.DownloadDataCompleted+=wc_DownloadDataCompleted; //wc.DownloadStringAsync(new Uri("https://jirafnd.dev.activenetwork.com/browse/HYTEK-274",UriKind.Absolute ),info);
wc.DownloadDataAsync(new Uri(info.url ,UriKind.Absolute ),info); } private static void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e){ (e.UserState as DownLoadInfo ).ProgressPercentage= e.ProgressPercentage; } private static void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e){ (e.UserState as DownLoadInfo ).isCompleted =( e.Error==null) ; }
}
// this for basic info class
public class DownLoadInfo{public string title{get;set;}
public string url{get;set;}
public string uid{get;set;}
public int ProgressPercentage{ get;set;}
public bool isCompleted{get;set;}
}
}
c# multi-ply download ui的更多相关文章
- jQuery ui autocomplete 与easyUI冲突解决办法(重命名ui的autocomplete 和menu部分)
http://jqueryui.com/download/ UI定制只选autocomplete 会自动把依赖的menu模块也加入进来--然而easyUI也有自己的menu,于是就-- 折腾了好久 ...
- 25套用于 Web UI 设计的免费 PSD 网页元素模板
Web 元素是任何网站相关项目都需要的,质量和良好设计的元素对于设计师来说就像宝贝一样.如果您正在为您的网站,博客,Web 应用程序或移动应用程序寻找完美设计的网页元素,那么下面这个列表会是你需要的. ...
- 免费素材:25套免费的 Web UI 设计的界面元素(转)
Web 元素是任何网站相关项目都需要的,质量和良好设计的元素对于设计师来说就像宝贝一样.如果您正在为您的网站,博客,Web 应用程序或移动应用程序寻找完美设计的网页元素,那么下面这个列表会是你需要的. ...
- "多行文本"组件:<multi> —— 快应用组件库H-UI
 <import name="multi" src="../Common/ui/h-ui/text/c_text_multi"></impo ...
- English word
第一部分 通过词缀认识单词 (常用前缀一) 1.a- ①加在单词(形容词)或词根前面,表示"不,无,非" acentric [ə'sentrik] a 无中心的(a+centr ...
- Android DownloadProvider学习 (二)
DownloadManager.Request用来请求一个下载,DownloadManager.Query用来查询下载信息,这两个类的具体功能会在后面穿插介绍.DownloadManager的源码可见 ...
- JavaScript使用DeviceOne开发实战(四)仿优酷视频应用
开发之前需要考虑系统的差异性,比如ios手机没有回退键,所以在开发时一定要考虑二级界面需要有回退键,否则ios的手机就会陷入到这个页面出不去了.安卓系统有回退键,针对这个情况需要要求用户在3秒钟之内连 ...
- Android 下载模块分析(DownloadManager和DownloadProvider)
Android下载模块主要有2个部分组成:DownloadManager和DownloadProvider:其中DownloadManager提供接口供调用,具体的实现是 DownloadProvid ...
- Android 演示 DownloadManager——Android 下载 apk 包并安装
本文内容 环境 项目结构 演示下载 参考资料 本文是 github 上 Trinea-Android-common 和 Trinea-Android-Demo 项目的一部分,将下载部分分离出来,看看如 ...
随机推荐
- 使用ServiceBroker自动激活模拟"秒杀"场景
1.简介 SQL Server Service Broker 是SQL server 里面比较独特的一个功能.它可帮助开发人员构建异步的松散耦合应用程序 ServiceBroker入门文章:http: ...
- SQL Server 登录名、用户、角色与权限
1.在SQL Server中,用户和角色是分为服务器级别和数据库级别的 2.服务器级别 登录名:指有权限登录到某服务器的用户,例如超级管理员的登录名是sa: 登录名具体位置在 数据库——>安全 ...
- OpenGLES渲染
OpenGLES渲染 OpenGLES使用GPU渲染图片,不占用CPU,但其使用还是挺复杂的. 先用OpenGLES显示一张图片: // // ShowViewController.m // Open ...
- NSArray排序方法讲解
NSArray排序方法讲解 给数组排序有着多种方式 最麻烦的是sortedArrayUsingSelector:,其次是sortedArrayUsingDescriptors:,最容易使用的就是sor ...
- 如何创建一个Quartz.NET的工作,需要注射autofac
问题: 使用 Quartz.Net 做定时任务时,实现IJob对象的服务,Autofac不会自动注入,使用构造函数会直接出现异常,无法执行Execute方法. 解决方式 方法一: 使用 Autofac ...
- ASP.NET在IIS的启动优化设置
ASP.NET在IIS的启动优化设置 约定: IIS=Internet Information Services Manager 概要 因为ASP.NET 程序在第一次启动的时候需要等待太长时间,至少 ...
- 为什么php+apache本地站点访问超级慢
/etc/hosts中必然有一行为127.0.0.1,作用是什么呢? 特点: (1)127.0.0.1不光是unix系统,linux也好,windows也好,都会有这个循回地址的.(2)在IP地址的规 ...
- 手写阻塞队列(Condition实现)
自己实现阻塞队列的话可以采用Object下的wait和notify方法,也可以使用Lock锁提供的Condition来实现,本文就是自己手撸的一个简单的阻塞队列,部分借鉴了JDK的源码.Ps:最近看面 ...
- iOS 开源库系列 Aspects核心源码分析---面向切面编程之疯狂的 Aspects
Aspects的源码学习,我学到的有几下几点 Objective-C Runtime 理解OC的消息分发机制 KVO中的指针交换技术 Block 在内存中的数据结构 const 的修饰区别 block ...
- scikit-learn决策树的python实现以及作图
decsion tree(决策树) 其中每个内部结点表示在一个属性上的测试,每个分支代表一个属性的输出,而每个树叶结点代表类或类的分布.树的最顶层是根节点 连续变量要离散化 机器学习中分类方法的一个重 ...