提交 46248440 编写于 作者: 林新发's avatar 林新发

Update Form1.cs

上级 25fb6608
using System;
using System;
using System.Data;
using System.Drawing;
using System.Linq;
......@@ -9,6 +9,7 @@ using System.IO;
using System.Net;
using System.Threading.Tasks;
using Ionic.Zip;
using System.Runtime.InteropServices;
namespace winform1
{
......@@ -17,12 +18,15 @@ namespace winform1
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";
private const string m_url = "https://smallgame.download.lkgame.com/game_space/sfish/57/qgame_test/QQGameUnityDemo.zip";
private const long m_totalSize = 21388019;
private const string m_md5 = "44BB65977FBF90062E8A3F5521D84A11";
//下载到本地的文件名
private const string m_saveFile = "./qgame_unity_demo.zip";
//解压目录
private const string m_unzipFile = "./qgame_unity_demo";
private const string m_exePath = "./qgame_unity_demo/QQGameUnityDemo/QQGameDemo.exe";
public Form1()
{
......@@ -30,7 +34,10 @@ namespace winform1
InitUi();
StartDownload();
if (!TryOpenUnityDemoExe())
{
StartDownload();
}
}
private void InitUi()
......@@ -47,6 +54,7 @@ namespace winform1
progressBar.MouseDown += OnMouseDown;
progressBar.MouseUp += OnMouseUp;
progressBar.MouseMove += OnMouseMove;
//提示语
tipsLbl.Parent = pictureBg;
processLbl.Parent = pictureBg;
......@@ -54,7 +62,23 @@ namespace winform1
//进度条
progressBar.Minimum = 0;
progressBar.Maximum = 100;
}
private bool TryOpenUnityDemoExe()
{
if (File.Exists(m_saveFile) && DownloadThread.GetMD5FromFile(m_saveFile) != m_md5)
{
return false;
}
if (File.Exists(m_exePath))
{
WinExec(m_exePath, 1);
System.Environment.Exit(0);
return true;
}
return false;
}
#region 隐藏标题栏后支持移动窗口
......@@ -98,19 +122,25 @@ namespace winform1
/// 被委托调用,专门设置进度条最大值
/// </summary>
/// <param name="maxValue"></param>
public void SetMax(int maxValue)
public void UpdateProgressMaxValue(int maxValue)
{
progressBar.Maximum = maxValue;
UpdateTipsLbl("正在下载,请耐心等待");
}
public void UpdateTipsLbl(string txt)
{
tipsLbl.Text = txt;
}
/// <summary>
/// 被委托调用,专门设置进度条当前值
/// </summary>
/// <param name="nowValue"></param>
private void SetNow(int nowValue)
private void UpdateProgressCurValue(int curValue)
{
progressBar.Value = nowValue;
string nowValueStr = string.Format("{0:F}", (float)nowValue / this.progressBar.Maximum * 100);
progressBar.Value = curValue;
string nowValueStr = string.Format("{0:F}", (float)curValue / progressBar.Maximum * 100);
processLbl.Text = nowValueStr + "%";
}
#endregion
......@@ -119,12 +149,13 @@ namespace winform1
{
DownloadThread method = new DownloadThread();
//先订阅一下事件
method.threadStartEvent += new EventHandler(DownloadThreadStartEvent);
method.threadEvent += new EventHandler(DownloadThreadIngEvent);
method.threadEndEvent += new EventHandler(DownloadThreadEndEvent);
method.eventDownloadStart += OnEventDownloadStart;
method.eventDownloadIng += OnEventDownloadIng;
method.eventCheckingMd5 += OnEventCheckMd5;
method.eventDownloadDone += OnEventDownloadDone;
//开启一个线程进行下载
Task task = new Task(() => { method.RunMethod(m_url, m_saveFile); });
Task task = new Task(() => { method.RunMethod(m_url, m_saveFile, m_totalSize, m_md5); });
task.Start();
}
......@@ -136,37 +167,38 @@ namespace winform1
}
}
/// <summary>
/// 线程开始事件,设置进度条最大值
/// 但是我不能直接操作进度条,需要一个委托来替我完成
/// </summary>
/// <param name="sender">ThreadMethod函数中传过来的最大值</param>
/// <param name="e"></param>
void DownloadThreadStartEvent(object sender, EventArgs e)
/// 但是不能直接操作进度条,需要一个委托来替我完成
void OnEventDownloadStart(long totalSize)
{
int maxValue = Convert.ToInt32(sender);
Invoke(new Action<int>(SetMax), maxValue);
Invoke(new Action<int>(UpdateProgressMaxValue), (int)totalSize);
}
/// <summary>
/// 线程执行中的事件,设置进度条当前进度
/// 但是我不能直接操作进度条,需要一个委托来替我完成
/// </summary>
/// <param name="sender">ThreadMethod函数中传过来的当前值</param>
/// <param name="e"></param>
void DownloadThreadIngEvent(object sender, EventArgs e)
/// 但是不能直接操作进度条,需要一个委托来替我完成
void OnEventDownloadIng(long curDownloadSize)
{
int nowValue = Convert.ToInt32(sender);
Invoke(new Action<int>(SetNow), nowValue);
Invoke(new Action<int>(UpdateProgressCurValue), (int)curDownloadSize);
}
void OnEventCheckMd5()
{
Invoke(new Action<string>(UpdateTipsLbl), "正在校验文件,请稍等");
}
/// <summary>
/// 线程完成事件
/// </summary>
void DownloadThreadEndEvent(object sender, EventArgs e)
void OnEventDownloadDone()
{
MessageBox.Show("下载完成完成,点击确定执行解压");
//解压文件
UnZipFile(m_saveFile);
//尝试打开下载的exe
TryOpenUnityDemoExe();
}
[DllImport("kernel32.dll")]
public static extern int WinExec(string exeName, int operType);
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册