diff --git a/winform1/Form1.cs b/winform1/Form1.cs
index 407f7a47f340d221cc7792a6a632b94c6c1fbc7d..d18af802ed4bc1ef5d26af75c2e4064766a868d1 100644
--- a/winform1/Form1.cs
+++ b/winform1/Form1.cs
@@ -1,4 +1,4 @@
-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
/// 被委托调用,专门设置进度条最大值
///
///
- public void SetMax(int maxValue)
+ public void UpdateProgressMaxValue(int maxValue)
{
progressBar.Maximum = maxValue;
+ UpdateTipsLbl("正在下载,请耐心等待");
+ }
+
+ public void UpdateTipsLbl(string txt)
+ {
+ tipsLbl.Text = txt;
}
///
/// 被委托调用,专门设置进度条当前值
///
///
- 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
}
}
- ///
+
/// 线程开始事件,设置进度条最大值
- /// 但是我不能直接操作进度条,需要一个委托来替我完成
- ///
- /// ThreadMethod函数中传过来的最大值
- ///
- void DownloadThreadStartEvent(object sender, EventArgs e)
+ /// 但是不能直接操作进度条,需要一个委托来替我完成
+ void OnEventDownloadStart(long totalSize)
{
- int maxValue = Convert.ToInt32(sender);
- Invoke(new Action(SetMax), maxValue);
+ Invoke(new Action(UpdateProgressMaxValue), (int)totalSize);
}
- ///
/// 线程执行中的事件,设置进度条当前进度
- /// 但是我不能直接操作进度条,需要一个委托来替我完成
- ///
- /// ThreadMethod函数中传过来的当前值
- ///
- void DownloadThreadIngEvent(object sender, EventArgs e)
+ /// 但是不能直接操作进度条,需要一个委托来替我完成
+ void OnEventDownloadIng(long curDownloadSize)
{
- int nowValue = Convert.ToInt32(sender);
- Invoke(new Action(SetNow), nowValue);
+ Invoke(new Action(UpdateProgressCurValue), (int)curDownloadSize);
+ }
+
+ void OnEventCheckMd5()
+ {
+ Invoke(new Action(UpdateTipsLbl), "正在校验文件,请稍等");
}
///
/// 线程完成事件
///
- 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);
}
}