286 lines
9.5 KiB
C#
286 lines
9.5 KiB
C#
using AllBase;
|
|
using DevComponents.DotNetBar;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
|
|
namespace TemuKJD.KJDForms.ToolForms
|
|
{
|
|
public partial class MeituMessageDialog : Form
|
|
{
|
|
public MeituMessageDialog()
|
|
{
|
|
InitializeComponent();
|
|
|
|
this.Text = "提示";
|
|
this.ShowIcon = false;
|
|
this.FormClosing += MessageDialog_FormClosing;
|
|
this.Activated += MessageDialog_Activated;
|
|
this.Load += MeituMessageDialog_Load;
|
|
}
|
|
|
|
private void MeituMessageDialog_Load(object sender, EventArgs e)
|
|
{
|
|
tableLayoutPanel2.Controls[tableLayoutPanel2.Controls.Count - 1].Focus();
|
|
foreach (var c in tableLayoutPanel2.Controls)
|
|
{
|
|
if (c is ButtonX)
|
|
{
|
|
var btn = c as ButtonX;
|
|
|
|
btn.Click += Btn_Click;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void MessageDialog_Activated(object sender, EventArgs e)
|
|
{
|
|
}
|
|
|
|
private void Btn_Click(object sender, EventArgs e)
|
|
{
|
|
var btn = sender as ButtonX;
|
|
if (btn != null)
|
|
clickBtnText = btn.Text;
|
|
|
|
if (btn.Text == "指定启动文件")
|
|
{
|
|
this.Close();
|
|
}
|
|
else if (btn.Text == "下载美图秀秀")
|
|
{
|
|
if (isDownload == true)
|
|
{
|
|
MessageBox.Show("下载中,请稍候!");
|
|
return;
|
|
}
|
|
|
|
// 单线程单元(STA)模式运行文件对话框,否则会报错。
|
|
System.Threading.Thread InvokeThread = new System.Threading.Thread(new System.Threading.ThreadStart(setDownloadPath));
|
|
InvokeThread.SetApartmentState(System.Threading.ApartmentState.STA);
|
|
InvokeThread.Start();
|
|
InvokeThread.Join();
|
|
}
|
|
else if (btn.Text == "安装美图秀秀")
|
|
{
|
|
System.Diagnostics.Process.Start(desFile);
|
|
//this.Close();
|
|
}
|
|
}
|
|
|
|
private void setDownloadPath()
|
|
{
|
|
FolderBrowserDialog dialog = new FolderBrowserDialog();
|
|
dialog.Description = "请选择文件路径";
|
|
|
|
if (dialog.ShowDialog() == DialogResult.OK)
|
|
{
|
|
desFile = dialog.SelectedPath;
|
|
|
|
new Thread(DownloadFileNoReturn).Start();
|
|
}
|
|
}
|
|
|
|
private void MessageDialog_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
isClick = true;
|
|
}
|
|
|
|
static bool isClick = false;
|
|
static string clickBtnText = "";
|
|
|
|
static MeituMessageDialog msg;
|
|
public static string ShowMessageDialog(string text = "", string btnsStr = "")
|
|
{
|
|
msg = new MeituMessageDialog();
|
|
string[] btnStrArr = btnsStr.Split(',');
|
|
msg.tableLayoutPanel2.Refresh();
|
|
msg.tableLayoutPanel2.ColumnCount = btnStrArr.Length + 2;
|
|
|
|
msg.tableLayoutPanel2.ColumnStyles.Clear();
|
|
msg.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(SizeType.Percent, 50F));
|
|
msg.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
|
msg.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());
|
|
msg.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(SizeType.Percent, 50F));
|
|
|
|
msg.labelX1.Text = text;
|
|
|
|
for (int i = 0; i < btnStrArr.Length; i++)
|
|
{
|
|
ButtonX btnX = new ButtonX();
|
|
msg.tableLayoutPanel2.Controls.Add(btnX, i + 1, 0);
|
|
btnX.Text = btnStrArr[i];
|
|
btnX.Dock = DockStyle.Fill;
|
|
|
|
btnX.AccessibleRole = AccessibleRole.PushButton;
|
|
btnX.ColorTable = eButtonColor.OrangeWithBackground;
|
|
btnX.Size = new Size(btnX.Text.Length * 16, 23);
|
|
btnX.Style = eDotNetBarStyle.StyleManagerControlled;
|
|
}
|
|
msg.StartPosition = FormStartPosition.CenterScreen;
|
|
//msg.TopMost = true;
|
|
msg.ShowDialog();
|
|
|
|
return clickBtnText;
|
|
}
|
|
|
|
private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
static string sourceFile = "http://xiuxiu.dl.meitu.com/xiuxiu_setup.exe";
|
|
static string desFile = "";
|
|
public static void DownloadFileNoReturn()
|
|
{
|
|
if (DownloadFile())
|
|
{
|
|
msg.Invoke(new Action(() =>
|
|
{
|
|
var btn = msg.tableLayoutPanel2.Controls[0] as ButtonX;
|
|
btn.Text = "安装美图秀秀";
|
|
}));
|
|
}
|
|
}
|
|
|
|
static bool isDownload = false;
|
|
/// 下载文件方法
|
|
/// 文件保存路径和文件名
|
|
/// 返回服务器文件名
|
|
public static bool DownloadFile()
|
|
{
|
|
isDownload = true;
|
|
|
|
if (sourceFile == "" || desFile == "")
|
|
{
|
|
isDownload = false;
|
|
return false;
|
|
}
|
|
|
|
bool flag = false;
|
|
long SPosition = 0;
|
|
FileStream FStream = null;
|
|
Stream myStream = null;
|
|
string fileName = sourceFile.Substring(sourceFile.LastIndexOf(@"/") + 1);
|
|
if (desFile.EndsWith("\\"))
|
|
{
|
|
desFile = desFile + fileName;
|
|
}
|
|
else
|
|
{
|
|
desFile = desFile + "\\" + fileName;
|
|
}
|
|
try
|
|
{
|
|
long serverFileLength = GetHttpLength(sourceFile);
|
|
msg.Invoke(new Action(() =>
|
|
{
|
|
msg.progressBarX1.Maximum = 100;
|
|
msg.progressBarX1.Visible = true;
|
|
}));
|
|
|
|
//判断要下载的文件夹是否存在
|
|
if (File.Exists(desFile))
|
|
{
|
|
//打开上次下载的文件
|
|
FStream = File.OpenWrite(desFile);
|
|
//获取已经下载的长度
|
|
SPosition = FStream.Length;
|
|
if (SPosition == serverFileLength)
|
|
{
|
|
//文件是完整的,直接结束下载任务
|
|
msg.Invoke(new Action(() =>
|
|
{
|
|
msg.progressBarX1.Value = 100;
|
|
}));
|
|
isDownload = false;
|
|
return true;
|
|
}
|
|
FStream.Seek(SPosition, SeekOrigin.Current);
|
|
}
|
|
else
|
|
{
|
|
//文件不保存创建一个文件
|
|
FStream = new FileStream(desFile, FileMode.Create);
|
|
SPosition = 0;
|
|
}
|
|
//打开网络连接
|
|
HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(sourceFile);
|
|
if (SPosition > 0)
|
|
{
|
|
myRequest.AddRange(SPosition); //设置Range值
|
|
}
|
|
//向服务器请求,获得服务器的回应数据流
|
|
myStream = myRequest.GetResponse().GetResponseStream();
|
|
//定义一个字节数据
|
|
byte[] btContent = new byte[512];
|
|
int intSize = 0;
|
|
intSize = myStream.Read(btContent, 0, 512);
|
|
while (intSize > 0)
|
|
{
|
|
FStream.Write(btContent, 0, intSize);
|
|
intSize = myStream.Read(btContent, 0, 512);
|
|
|
|
var currentPosition = FStream.Length;
|
|
msg.Invoke(new Action(() =>
|
|
{
|
|
msg.progressBarX1.Value = (int)(1.0 * currentPosition / serverFileLength * 100);
|
|
}));
|
|
}
|
|
flag = true; //返回true下载成功
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
//SysLog.WriteTxtLog("下载文件时异常:" + ex.Message);
|
|
LogSave.Add("MeituMessageDialog - 下载文件时异常:" + ex.Message);
|
|
}
|
|
finally
|
|
{
|
|
//关闭流
|
|
if (myStream != null)
|
|
{
|
|
myStream.Close();
|
|
myStream.Dispose();
|
|
}
|
|
if (FStream != null)
|
|
{
|
|
FStream.Close();
|
|
FStream.Dispose();
|
|
}
|
|
}
|
|
isDownload = false;
|
|
return flag;
|
|
}
|
|
static long GetHttpLength(string url)
|
|
{
|
|
long length = 0;
|
|
try
|
|
{
|
|
var req = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url));
|
|
req.Method = "HEAD";
|
|
req.Timeout = 5000;
|
|
var res = (HttpWebResponse)req.GetResponse();
|
|
if (res.StatusCode == HttpStatusCode.OK)
|
|
{
|
|
length = res.ContentLength;
|
|
}
|
|
res.Close();
|
|
return length;
|
|
}
|
|
catch (WebException wex)
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
}
|