downloading.cs

来自「破解的飞信源代码」· CS 代码 · 共 210 行

CS
210
字号
namespace Imps.Client.Pc
{
    using Imps.Client.Utils;
    using System;
    using System.ComponentModel;
    using System.Drawing;
    using System.Threading;
    using System.Windows.Forms;

    public class Downloading : Form, IHandleUserStatusSelf
    {
        private long _downloaded;
        private Downloader _downloader = new Downloader();
        private Thread _downloadThread;
        private string _downloadUrl;
        private UpdateInfo _updateInfo;
        private WorkPathInfo _workPath = new WorkPathInfo();
        private Button buttonCancel;
        private IContainer components;
        private ProgressBar downloadProgress;
        private LinkLabel lDownloadURL;
        private Label lMessage;
        private Panel panel1;

        internal Downloading(UpdateInfo updateInfo, string downloadUrl)
        {
            this.InitializeComponent();
            this._updateInfo = updateInfo;
            this._downloadUrl = downloadUrl;
            this.downloadProgress.Maximum = 100;
            this.downloadProgress.Value = 0;
            this._downloader.PartDownloaded += new EventHandler<PartDownloadedEventArgs>(this, (IntPtr) this.downloader_PartDownloaded);
            this._downloader.EndDownload += new EventHandler<EndDownloadedEventArgs>(this, (IntPtr) this.downloader_EndDownload);
            this.lDownloadURL.Text = this._downloadUrl;
        }

        private void buttonCancel_Click(object sender, EventArgs e)
        {
            DialogResult result;
            lock (this._downloader.DownloadLocker)
            {
                result = MessageBox.Show("更新正在进行中,您确定要退出吗?", "退出更新", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);
            }
            if (result == DialogResult.OK)
            {
                if (this._downloadThread != null)
                {
                    this._downloadThread.Abort();
                }
                base.DialogResult = DialogResult.No;
                base.Close();
            }
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (this.components != null))
            {
                this.components.Dispose();
            }
            base.Dispose(disposing);
        }

        private void downloader()
        {
            try
            {
                string path = StaticTools.GetFullPath(this._workPath.ClientUpdateFile);
                this._downloader.Download(this._downloadUrl, path);
            }
            catch (Exception exception)
            {
                ClientLogger.WriteGeneral("下载更新失败", exception.ToString(), 20);
            }
        }

        private void downloader_EndDownload(object sender, EndDownloadedEventArgs e)
        {
            this.downloadProgress.Value = 100;
            if (e.IsComplete)
            {
                base.DialogResult = DialogResult.Yes;
                base.Close();
            }
            else
            {
                using (DownloadError error = new DownloadError(this._downloadUrl))
                {
                    if (error.ShowDialog() == DialogResult.Yes)
                    {
                        this._downloaded = 0;
                        this.downloadProgress.Value = 0;
                        base.Activate();
                        this.StartDownloader();
                        return;
                    }
                }
                base.DialogResult = DialogResult.No;
                base.Close();
            }
        }

        private void downloader_PartDownloaded(object sender, PartDownloadedEventArgs e)
        {
            try
            {
                this._downloaded += e.Size;
                this.downloadProgress.Value = (int) ((this._downloaded * 100) / this._updateInfo.Size);
            }
            catch
            {
                this.downloadProgress.Value = 100;
            }
        }

        private void Downloading_Load(object sender, EventArgs e)
        {
            this.StartDownloader();
        }

        private void InitializeComponent()
        {
            ComponentResourceManager manager = new ComponentResourceManager(typeof(Downloading));
            this.downloadProgress = new ProgressBar();
            this.buttonCancel = new Button();
            this.lMessage = new Label();
            this.lDownloadURL = new LinkLabel();
            this.panel1 = new Panel();
            this.panel1.SuspendLayout();
            base.SuspendLayout();
            this.downloadProgress.Location = new System.Drawing.Point(12, 0x39);
            this.downloadProgress.Name = "downloadProgress";
            this.downloadProgress.Size = new Size(410, 0x15);
            this.downloadProgress.TabIndex = 0;
            this.downloadProgress.Value = 50;
            this.buttonCancel.Location = new System.Drawing.Point(0x1b6, 0x39);
            this.buttonCancel.Name = "buttonCancel";
            this.buttonCancel.Size = new Size(0x4b, 0x15);
            this.buttonCancel.TabIndex = 1;
            this.buttonCancel.Text = "退出";
            this.buttonCancel.set_UseVisualStyleBackColor(true);
            this.buttonCancel.Click += new EventHandler(this.buttonCancel_Click);
            this.lMessage.set_AutoSize(true);
            this.lMessage.Location = new System.Drawing.Point(12, 12);
            this.lMessage.Name = "lMessage";
            this.lMessage.Size = new Size(0x10d, 12);
            this.lMessage.TabIndex = 2;
            this.lMessage.Text = "如果下载速度缓慢,您可以自行到以下网址下载:";
            this.lDownloadURL.set_AutoSize(true);
            this.lDownloadURL.Location = new System.Drawing.Point(12, 0x21);
            this.lDownloadURL.Name = "lDownloadURL";
            this.lDownloadURL.Size = new Size(0x47, 12);
            this.lDownloadURL.TabIndex = 3;
            this.lDownloadURL.TabStop = true;
            this.lDownloadURL.Text = "DownloadURL";
            this.lDownloadURL.LinkClicked += new LinkLabelLinkClickedEventHandler(this.lDownloadURL_LinkClicked);
            this.panel1.BackColor = Color.Transparent;
            this.panel1.Controls.Add(this.lMessage);
            this.panel1.Controls.Add(this.lDownloadURL);
            this.panel1.Controls.Add(this.downloadProgress);
            this.panel1.Controls.Add(this.buttonCancel);
            this.panel1.Dock = DockStyle.Fill;
            this.panel1.Location = new System.Drawing.Point(0, 0);
            this.panel1.Name = "panel1";
            this.panel1.Size = new Size(0x20b, 0x58);
            this.panel1.TabIndex = 4;
            base.set_AutoScaleDimensions(new SizeF(6f, 12f));
            base.set_AutoScaleMode(1);
            base.ClientSize = new Size(0x20b, 0x58);
            base.Controls.Add(this.panel1);
            base.FormBorderStyle = FormBorderStyle.FixedToolWindow;
            base.Icon = (Icon) manager.GetObject("$this.Icon");
            base.Name = "Downloading";
            base.StartPosition = FormStartPosition.CenterScreen;
            this.Text = "正在下载更新";
            base.Load += new EventHandler(this.Downloading_Load);
            this.panel1.ResumeLayout(false);
            this.panel1.PerformLayout();
            base.ResumeLayout(false);
        }

        private void lDownloadURL_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ShellHelper.StartUrl(this._downloadUrl);
        }

        protected override void OnClosed(EventArgs e)
        {
            this._downloader.PartDownloaded -= new EventHandler<PartDownloadedEventArgs>(this, (IntPtr) this.downloader_PartDownloaded);
            this._downloader.EndDownload -= new EventHandler<EndDownloadedEventArgs>(this, (IntPtr) this.downloader_EndDownload);
            base.OnClosed(e);
        }

        private void StartDownloader()
        {
            this._downloadThread = new Thread(new ThreadStart(this.downloader));
            this._downloadThread.Start();
        }

        bool IHandleUserStatusSelf.Handled
        {
            get
            {
                return true;
            }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?