using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Threading.Tasks;
using Ionic.Zip;
namespace winform1
{
public partial class Form1 : Form
{
private Point m_mousePos;
private bool m_isMouseDown;
//要下载的文件的url
private const string m_url = "https://codechina.csdn.net/linxinfa/winform-download-demo/-/raw/master/winform1/res/guitar.zip";
//下载到本地的文件名
private const string m_saveFile = "./download.zip";
//加压目录
private const string m_unzipFile = "./unzip";
public Form1()
{
InitializeComponent();
InitUi();
StartDownload();
}
private void InitUi()
{
//隐藏标题栏
this.FormBorderStyle = FormBorderStyle.None;
//背景图
pictureBg.SizeMode = PictureBoxSizeMode.StretchImage;
//窗口移动控制
pictureBg.MouseDown += OnMouseDown;
pictureBg.MouseUp += OnMouseUp;
pictureBg.MouseMove += OnMouseMove;
progressBar.MouseDown += OnMouseDown;
progressBar.MouseUp += OnMouseUp;
progressBar.MouseMove += OnMouseMove;
//提示语
tipsLbl.Parent = pictureBg;
processLbl.Parent = pictureBg;
processLbl.Text = "0%";
//进度条
progressBar.Minimum = 0;
progressBar.Maximum = 100;
}
#region 隐藏标题栏后支持移动窗口
///
/// 鼠标按下,开启移动
///
///
protected void OnMouseDown(object sender, MouseEventArgs e)
{
m_mousePos = Cursor.Position;
m_isMouseDown = true;
}
///
/// 鼠标抬起,关闭移动
///
///
protected void OnMouseUp(object sender, MouseEventArgs e)
{
m_isMouseDown = false;
this.Focus();
}
///
/// 移动窗口
///
///
private void OnMouseMove(object sender, MouseEventArgs e)
{
if (m_isMouseDown)
{
Point tempPos = Cursor.Position;
this.Location = new Point(Location.X + (tempPos.X - m_mousePos.X), Location.Y + (tempPos.Y - m_mousePos.Y));
m_mousePos = Cursor.Position;
}
}
#endregion
#region 更新进度条
///
/// 被委托调用,专门设置进度条最大值
///
///
public void SetMax(int maxValue)
{
progressBar.Maximum = maxValue;
}
///
/// 被委托调用,专门设置进度条当前值
///
///
private void SetNow(int nowValue)
{
progressBar.Value = nowValue;
string nowValueStr = string.Format("{0:F}", (float)nowValue / this.progressBar.Maximum * 100);
processLbl.Text = nowValueStr + "%";
}
#endregion
private void StartDownload()
{
DownloadThread method = new DownloadThread();
//先订阅一下事件
method.threadStartEvent += new EventHandler(DownloadThreadStartEvent);
method.threadEvent += new EventHandler(DownloadThreadIngEvent);
method.threadEndEvent += new EventHandler(DownloadThreadEndEvent);
//开启一个线程进行下载
Task task = new Task(() => { method.RunMethod(m_url, m_saveFile); });
task.Start();
}
private void UnZipFile(string file)
{
using (ZipFile zip = new ZipFile(file))
{
zip.ExtractAll(m_unzipFile);
}
}
///
/// 线程开始事件,设置进度条最大值
/// 但是我不能直接操作进度条,需要一个委托来替我完成
///
/// ThreadMethod函数中传过来的最大值
///
void DownloadThreadStartEvent(object sender, EventArgs e)
{
int maxValue = Convert.ToInt32(sender);
Invoke(new Action(SetMax), maxValue);
}
///
/// 线程执行中的事件,设置进度条当前进度
/// 但是我不能直接操作进度条,需要一个委托来替我完成
///
/// ThreadMethod函数中传过来的当前值
///
void DownloadThreadIngEvent(object sender, EventArgs e)
{
int nowValue = Convert.ToInt32(sender);
Invoke(new Action(SetNow), nowValue);
}
///
/// 线程完成事件
///
void DownloadThreadEndEvent(object sender, EventArgs e)
{
MessageBox.Show("下载完成完成,点击确定执行解压");
UnZipFile(m_saveFile);
}
}
}