Files
KJD/TEMUKJD/ToolForms/Old/MeituMessageDialog.cs
T

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;
}
}
}
}