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

Update Form1.cs

上级 25fb6608
using System; using System;
using System.Data; using System.Data;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
...@@ -9,6 +9,7 @@ using System.IO; ...@@ -9,6 +9,7 @@ using System.IO;
using System.Net; using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
using Ionic.Zip; using Ionic.Zip;
using System.Runtime.InteropServices;
namespace winform1 namespace winform1
{ {
...@@ -17,12 +18,15 @@ namespace winform1 ...@@ -17,12 +18,15 @@ namespace winform1
private Point m_mousePos; private Point m_mousePos;
private bool m_isMouseDown; private bool m_isMouseDown;
//要下载的文件的url //要下载的文件的url
private const string m_url = "https://codechina.csdn.net/linxinfa/winform-download-demo/-/raw/master/winform1/res/guitar.zip"; 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_saveFile = "./download.zip"; private const string m_md5 = "44BB65977FBF90062E8A3F5521D84A11";
//加压目录
private const string m_unzipFile = "./unzip";
//下载到本地的文件名
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() public Form1()
{ {
...@@ -30,7 +34,10 @@ namespace winform1 ...@@ -30,7 +34,10 @@ namespace winform1
InitUi(); InitUi();
StartDownload(); if (!TryOpenUnityDemoExe())
{
StartDownload();
}
} }
private void InitUi() private void InitUi()
...@@ -47,6 +54,7 @@ namespace winform1 ...@@ -47,6 +54,7 @@ namespace winform1
progressBar.MouseDown += OnMouseDown; progressBar.MouseDown += OnMouseDown;
progressBar.MouseUp += OnMouseUp; progressBar.MouseUp += OnMouseUp;
progressBar.MouseMove += OnMouseMove; progressBar.MouseMove += OnMouseMove;
//提示语 //提示语
tipsLbl.Parent = pictureBg; tipsLbl.Parent = pictureBg;
processLbl.Parent = pictureBg; processLbl.Parent = pictureBg;
...@@ -54,7 +62,23 @@ namespace winform1 ...@@ -54,7 +62,23 @@ namespace winform1
//进度条 //进度条
progressBar.Minimum = 0; 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 隐藏标题栏后支持移动窗口 #region 隐藏标题栏后支持移动窗口
...@@ -98,19 +122,25 @@ namespace winform1 ...@@ -98,19 +122,25 @@ namespace winform1
/// 被委托调用,专门设置进度条最大值 /// 被委托调用,专门设置进度条最大值
/// </summary> /// </summary>
/// <param name="maxValue"></param> /// <param name="maxValue"></param>
public void SetMax(int maxValue) public void UpdateProgressMaxValue(int maxValue)
{ {
progressBar.Maximum = maxValue; progressBar.Maximum = maxValue;
UpdateTipsLbl("正在下载,请耐心等待");
}
public void UpdateTipsLbl(string txt)
{
tipsLbl.Text = txt;
} }
/// <summary> /// <summary>
/// 被委托调用,专门设置进度条当前值 /// 被委托调用,专门设置进度条当前值
/// </summary> /// </summary>
/// <param name="nowValue"></param> /// <param name="nowValue"></param>
private void SetNow(int nowValue) private void UpdateProgressCurValue(int curValue)
{ {
progressBar.Value = nowValue; progressBar.Value = curValue;
string nowValueStr = string.Format("{0:F}", (float)nowValue / this.progressBar.Maximum * 100); string nowValueStr = string.Format("{0:F}", (float)curValue / progressBar.Maximum * 100);
processLbl.Text = nowValueStr + "%"; processLbl.Text = nowValueStr + "%";
} }
#endregion #endregion
...@@ -119,12 +149,13 @@ namespace winform1 ...@@ -119,12 +149,13 @@ namespace winform1
{ {
DownloadThread method = new DownloadThread(); DownloadThread method = new DownloadThread();
//先订阅一下事件 //先订阅一下事件
method.threadStartEvent += new EventHandler(DownloadThreadStartEvent); method.eventDownloadStart += OnEventDownloadStart;
method.threadEvent += new EventHandler(DownloadThreadIngEvent); method.eventDownloadIng += OnEventDownloadIng;
method.threadEndEvent += new EventHandler(DownloadThreadEndEvent); 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(); task.Start();
} }
...@@ -136,37 +167,38 @@ namespace winform1 ...@@ -136,37 +167,38 @@ namespace winform1
} }
} }
/// <summary>
/// 线程开始事件,设置进度条最大值 /// 线程开始事件,设置进度条最大值
/// 但是我不能直接操作进度条,需要一个委托来替我完成 /// 但是不能直接操作进度条,需要一个委托来替我完成
/// </summary> void OnEventDownloadStart(long totalSize)
/// <param name="sender">ThreadMethod函数中传过来的最大值</param>
/// <param name="e"></param>
void DownloadThreadStartEvent(object sender, EventArgs e)
{ {
int maxValue = Convert.ToInt32(sender); Invoke(new Action<int>(UpdateProgressMaxValue), (int)totalSize);
Invoke(new Action<int>(SetMax), maxValue);
} }
/// <summary>
/// 线程执行中的事件,设置进度条当前进度 /// 线程执行中的事件,设置进度条当前进度
/// 但是我不能直接操作进度条,需要一个委托来替我完成 /// 但是不能直接操作进度条,需要一个委托来替我完成
/// </summary> void OnEventDownloadIng(long curDownloadSize)
/// <param name="sender">ThreadMethod函数中传过来的当前值</param>
/// <param name="e"></param>
void DownloadThreadIngEvent(object sender, EventArgs e)
{ {
int nowValue = Convert.ToInt32(sender); Invoke(new Action<int>(UpdateProgressCurValue), (int)curDownloadSize);
Invoke(new Action<int>(SetNow), nowValue); }
void OnEventCheckMd5()
{
Invoke(new Action<string>(UpdateTipsLbl), "正在校验文件,请稍等");
} }
/// <summary> /// <summary>
/// 线程完成事件 /// 线程完成事件
/// </summary> /// </summary>
void DownloadThreadEndEvent(object sender, EventArgs e) void OnEventDownloadDone()
{ {
MessageBox.Show("下载完成完成,点击确定执行解压"); //解压文件
UnZipFile(m_saveFile); 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.
先完成此消息的编辑!
想要评论请 注册