示例#1
0
        private void Btn_download_Click(object sender, EventArgs e)
        {
            string url = txt_url.Text;

            downloader = new MultiThreadDownloader();
            HelperDownload   h = this.UpdateProgress;
            DownloadComplete d = this.DisplayMessage;

            downloader.DownloadHelperDownload(url, h, d);
        }
示例#2
0
        public static void DownloadFileAsync(string url, string path, string name,
                                             Action <object, EventArgs> progressChangedAction = null, Action <object, int> completedAction = null)
        {
            if (!Directory.Exists(path))
            {
                return;
            }
            if (!path.EndsWith("\\"))
            {
                path += "\\";
            }
            var mtd = new MultiThreadDownloader(url, path + name, 1);

            if (progressChangedAction != null)
            {
                mtd.TotalProgressChanged += (sender, e) => progressChangedAction.Invoke(sender, e);
            }
            if (completedAction != null)
            {
                mtd.FileMergeProgressChanged += (sender, e) => completedAction.Invoke(sender, e);
            }
            mtd.Start();

            /*new Task(new Action(() =>
             * {
             *  if (!Directory.Exists(path)) { return; }
             *  if (!path.EndsWith("\\")) { path += "\\"; }
             *  try
             *  {
             *      byte[] data = HttpWebClient.Get(url);
             *      if (data.Length != 0)
             *      {
             *          FileStream fs = new FileStream(path + name, FileMode.OpenOrCreate, FileAccess.ReadWrite);
             *          fs.Write(data, 0, data.Length);
             *          fs.Flush();
             *          fs.Dispose();
             *          fs.Close();
             *      }
             *  }
             *  catch
             *  {
             *
             *  }
             *
             * })).Start();*/
        }
示例#3
0
        private void btnDownload_Click(object sender, RoutedEventArgs e)
        {
            var mtd = new MultiThreadDownloader("https://download.oracle.com/otn-pub/java/jdk/15+36/779bf45e88a44cbd9ea6621d33e33db1/jdk-15_windows-x64_bin.zip", Environment.GetEnvironmentVariable("temp"), "jdk-15_windows-x64_bin.zip", 8);

            mtd.TotalProgressChanged += (sender, e) =>
            {
                var downloader = sender as MultiThreadDownloader;
                Console.WriteLine("下载进度:" + downloader.TotalProgress + "%");
                Console.WriteLine("下载速度:" + downloader.TotalSpeedInBytes / 1024 / 1024 + "MBps");
            };
            mtd.FileMergeProgressChanged += (sender, e) =>
            {
                Console.WriteLine("下载完成");
            };
            mtd.Start();//开始下载
            //mtd.Pause(); // 暂停下载
            //mtd.Resume(); // 继续下载
        }
示例#4
0
        static void Main(string[] args)
        {
            var mtd = new MultiThreadDownloader("https://git.imweb.io/ldqk0/imgbed/raw/master/2020/01/05/sdcgssa1wlxc.jpg", Environment.GetEnvironmentVariable("temp"), "Y:\\1.jpg", 8);

            mtd.Configure(req =>
            {
                req.Referer = "https://masuit.com";
                req.Headers.Add("Origin", "https://baidu.com");
            });
            mtd.TotalProgressChanged += (sender, e) =>
            {
                var downloader = sender as MultiThreadDownloader;
                Console.WriteLine("下载进度:" + downloader.TotalProgress + "%");
                Console.WriteLine("下载速度:" + downloader.TotalSpeedInBytes / 1024 / 1024 + "MBps");
            };
            mtd.FileMergeProgressChanged += (sender, e) =>
            {
                Console.WriteLine("下载完成");
            };
            mtd.Start();//开始下载
            Console.ReadKey();
        }
示例#5
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            #region 检查环境
            if ((System.Environment.Version.Major == 4) && (System.Environment.Version.Minor == 0))
            {
                if ((!SystemTools.IsSetupFrameworkUpdate("KB2468871v2")) && (!SystemTools.IsSetupFrameworkUpdate("KB2468871")))
                {
                    var result = MessageBox.Show(GetResourceString("String.Message.NoFrameworkUpdate2"),
                                                 GetResourceString("String.Message.NoFrameworkUpdate"),
                                                 MessageBoxButton.YesNo);
                    if (result == MessageBoxResult.Yes)
                    {
                        System.Diagnostics.Process.Start("https://github.com/Nsiso/NsisoLauncher/wiki/%E5%90%AF%E5%8A%A8%E5%99%A8%E6%8A%A5%E9%94%99%EF%BC%9A%E5%BD%93%E5%89%8D%E7%94%B5%E8%84%91%E7%8E%AF%E5%A2%83%E7%BC%BA%E5%B0%91KB2468871v2%E8%A1%A5%E4%B8%81");
                        System.Environment.Exit(0);
                    }
                }
            }
            #endregion

            #region DEBUG初始化
            //debug
            logHandler = new LogHandler(true);
            AggregateExceptionCatched += (a, b) => logHandler.AppendFatal(b.AggregateException);
            if (e.Args.Contains("-debug"))
            {
                Windows.DebugWindow debugWindow = new Windows.DebugWindow();
                debugWindow.Show();
                logHandler.OnLog += (s, log) => debugWindow?.AppendLog(s, log);
            }
            #endregion

            config = new ConfigHandler();

            #region DEBUG初始化(基于配置文件)
            if (config.MainConfig.Launcher.Debug && !e.Args.Contains("-debug"))
            {
                Windows.DebugWindow debugWindow = new Windows.DebugWindow();
                debugWindow.Show();
                logHandler.OnLog += (s, log) => debugWindow?.AppendLog(s, log);
            }
            #endregion

            #region 数据初始化
            Config.Environment env = config.MainConfig.Environment;

            javaList = Java.GetJavaList();

            //设置版本路径
            string gameroot = null;
            switch (env.GamePathType)
            {
            case GameDirEnum.ROOT:
                gameroot = Path.GetFullPath(".minecraft");
                break;

            case GameDirEnum.APPDATA:
                gameroot = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\\.minecraft";
                break;

            case GameDirEnum.PROGRAMFILES:
                gameroot = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + "\\.minecraft";
                break;

            case GameDirEnum.CUSTOM:
                gameroot = env.GamePath + "\\.minecraft";
                break;

            default:
                throw new ArgumentException("判断游戏目录类型时出现异常,请检查配置文件中GamePathType节点");
            }
            logHandler.AppendInfo("核心初始化->游戏根目录(默认则为空):" + gameroot);

            //设置JAVA
            Java java = null;
            if (env.AutoJava)
            {
                java = Java.GetSuitableJava(javaList);
            }
            else
            {
                java = javaList.Find(x => x.Path == env.JavaPath);
                if (java == null)
                {
                    java = Java.GetJavaInfo(env.JavaPath);
                }
            }
            if (java != null)
            {
                env.JavaPath = java.Path;
                logHandler.AppendInfo("核心初始化->Java路径:" + java.Path);
                logHandler.AppendInfo("核心初始化->Java版本:" + java.Version);
                logHandler.AppendInfo("核心初始化->Java位数:" + java.Arch);
            }
            else
            {
                logHandler.AppendWarn("核心初始化失败,当前电脑未匹配到JAVA");
            }

            //设置版本独立
            bool verIso = config.MainConfig.Environment.VersionIsolation;
            #endregion

            #region 启动核心初始化
            handler          = new LaunchHandler(gameroot, java, verIso);
            handler.GameLog += (s, log) => logHandler.AppendLog(s, new Log()
            {
                LogLevel = LogLevel.GAME, Message = log
            });
            #endregion

            #region  载核心初始化
            ServicePointManager.DefaultConnectionLimit = 10;
            Download downloadCfg = config.MainConfig.Download;
            downloader = new MultiThreadDownloader();
            if (!string.IsNullOrWhiteSpace(downloadCfg.DownloadProxyAddress))
            {
                WebProxy proxy = new WebProxy(downloadCfg.DownloadProxyAddress, downloadCfg.DownloadProxyPort);
                if (!string.IsNullOrWhiteSpace(downloadCfg.ProxyUserName))
                {
                    NetworkCredential credential = new NetworkCredential(downloadCfg.ProxyUserName, downloadCfg.ProxyUserPassword);
                    proxy.Credentials = credential;
                }
                downloader.Proxy = proxy;
            }
            downloader.ProcessorSize = App.config.MainConfig.Download.DownloadThreadsSize;
            downloader.DownloadLog  += (s, log) => logHandler?.AppendLog(s, log);
            #endregion

            #region NIDE8核心初始化
            if (!string.IsNullOrWhiteSpace(config.MainConfig.User.Nide8ServerID))
            {
                nide8Handler = new Core.Net.Nide8API.APIHandler(config.MainConfig.User.Nide8ServerID);
                nide8Handler.UpdateBaseURL();
            }
            #endregion

            #region 自定义主题初始化
            var custom = config.MainConfig.Customize;
            if (!string.IsNullOrWhiteSpace(custom.AccentColor) && !string.IsNullOrWhiteSpace(custom.AppThme))
            {
                logHandler.AppendInfo("自定义->更改主题颜色:" + custom.AccentColor);
                logHandler.AppendInfo("自定义->更改主题:" + custom.AppThme);
                ThemeManager.ChangeAppStyle(Current, ThemeManager.GetAccent(custom.AccentColor), ThemeManager.GetAppTheme(custom.AppThme));
            }
            #endregion
        }
示例#6
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            #region DEBUG初始化
            //debug
            logHandler = new LogHandler(true);
            AggregateExceptionCatched += (a, b) => logHandler.AppendFatal(b.AggregateException);
            if (e.Args.Contains("-debug"))
            {
                Windows.DebugWindow debugWindow = new Windows.DebugWindow();
                debugWindow.Show();
                logHandler.OnLog += (s, log) => debugWindow?.AppendLog(s, log);
            }
            #endregion

            config = new ConfigHandler();

            #region DEBUG初始化(基于配置文件)
            if (config.MainConfig.Launcher.Debug && !e.Args.Contains("-debug"))
            {
                Windows.DebugWindow debugWindow = new Windows.DebugWindow();
                debugWindow.Show();
                logHandler.OnLog += (s, log) => debugWindow?.AppendLog(s, log);
            }
            #endregion

            #region MineRealms反馈API初始化

#if DEBUG
            MineRealmsAPIHandler = new MineRealmsLauncherCore.Net.PhalAPI.APIHandler(true);
#else
            MineRealmsAPIHandler = new MineRealmsLauncherCore.Net.PhalAPI.APIHandler(config.MainConfig.Launcher.NoTracking);
#endif

            #endregion

            #region 数据初始化
            Config.Environment env = config.MainConfig.Environment;

            javaList = Java.GetJavaList();

            //设置版本路径
            string gameroot = null;
            switch (env.GamePathType)
            {
            case GameDirEnum.ROOT:
                gameroot = Path.GetFullPath(".minecraft");
                break;

            case GameDirEnum.APPDATA:
                gameroot = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\\.minecraft";
                break;

            case GameDirEnum.PROGRAMFILES:
                gameroot = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + "\\.minecraft";
                break;

            case GameDirEnum.CUSTOM:
                gameroot = env.GamePath + "\\.minecraft";
                break;

            default:
                throw new ArgumentException("判断游戏目录类型时出现异常,请检查配置文件中GamePathType节点");
            }
            logHandler.AppendInfo("核心初始化->游戏根目录(默认则为空):" + gameroot);

            //设置JAVA
            Java java = null;
            if (env.AutoJava)
            {
                java = Java.GetSuitableJava(javaList);
            }
            else
            {
                java = javaList.Find(x => x.Path == env.JavaPath);
                if (java == null)
                {
                    java = Java.GetJavaInfo(env.JavaPath);
                }
            }
            if (java != null)
            {
                env.JavaPath = java.Path;
                logHandler.AppendInfo("核心初始化->Java路径:" + java.Path);
                logHandler.AppendInfo("核心初始化->Java版本:" + java.Version);
                logHandler.AppendInfo("核心初始化->Java位数:" + java.Arch);
            }
            else
            {
                logHandler.AppendWarn("核心初始化失败,当前电脑未匹配到JAVA");
            }

            //设置版本独立
            bool verIso = config.MainConfig.Environment.VersionIsolation;
            #endregion

            #region 启动核心初始化
            handler          = new LaunchHandler(gameroot, java, verIso);
            handler.GameLog += (s, log) => logHandler.AppendLog(s, new Log()
            {
                LogLevel = LogLevel.GAME, Message = log
            });
            handler.LaunchLog += (s, log) => logHandler.AppendLog(s, log);
            #endregion

            #region  载核心初始化
            ServicePointManager.DefaultConnectionLimit = 10;

            Download downloadCfg = config.MainConfig.Download;
            downloader = new MultiThreadDownloader();
            if (!string.IsNullOrWhiteSpace(downloadCfg.DownloadProxyAddress))
            {
                WebProxy proxy = new WebProxy(downloadCfg.DownloadProxyAddress, downloadCfg.DownloadProxyPort);
                if (!string.IsNullOrWhiteSpace(downloadCfg.ProxyUserName))
                {
                    NetworkCredential credential = new NetworkCredential(downloadCfg.ProxyUserName, downloadCfg.ProxyUserPassword);
                    proxy.Credentials = credential;
                }
                downloader.Proxy = proxy;
            }
            downloader.ProcessorSize = App.config.MainConfig.Download.DownloadThreadsSize;
            downloader.CheckFileHash = App.config.MainConfig.Download.CheckDownloadFileHash;
            downloader.DownloadLog  += (s, log) => logHandler?.AppendLog(s, log);
            #endregion

            #region 自定义主题初始化
            var custom = config.MainConfig.Customize;
            if (!string.IsNullOrWhiteSpace(custom.AccentColor) && !string.IsNullOrWhiteSpace(custom.AppThme))
            {
                logHandler.AppendInfo("自定义->更改主题颜色:" + custom.AccentColor);
                logHandler.AppendInfo("自定义->更改主题:" + custom.AppThme);
                ThemeManager.ChangeAppStyle(Current, ThemeManager.GetAccent(custom.AccentColor), ThemeManager.GetAppTheme(custom.AppThme));
            }
            #endregion
        }
示例#7
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            #region DEBUG初始化
            //debug
            LogHandler = new LogHandler(true);
            AggregateExceptionCatched += (a, b) => LogHandler.AppendFatal(b.AggregateException);
            if (e.Args.Contains("-debug"))
            {
                DebugWindow debugWindow = new DebugWindow();
                debugWindow.Show();
                LogHandler.OnLog += (s, log) => debugWindow?.AppendLog(s, log);
            }
            #endregion

            #region 从旧版本跳转
            String[] args = System.Environment.GetCommandLineArgs();
            if (args.Length == 2)
            {
                //关闭并删除旧版本
                Task.Run(() =>
                {
                    Process oldLauncher    = Process.GetProcessById(Convert.ToInt32(args[1]));
                    string oldLauncherPath = oldLauncher.MainModule.FileName;
                    oldLauncher.Kill();
                    oldLauncher.WaitForExit();
                    File.Delete(oldLauncherPath);
                });
            }
            #endregion

            Config = new ConfigHandler();

            #region DEBUG初始化(基于配置文件)
            if (Config.MainConfig.Launcher.Debug && !e.Args.Contains("-debug"))
            {
                DebugWindow debugWindow = new DebugWindow();
                debugWindow.Show();
                LogHandler.OnLog += (s, log) => debugWindow?.AppendLog(s, log);
            }
            #endregion

            #region Nsiso反馈API初始化

#if DEBUG
            NsisoAPIHandler = new NsisoLauncherCore.Net.PhalAPI.APIHandler(true);
#else
            NsisoAPIHandler = new NsisoLauncherCore.Net.PhalAPI.APIHandler(Config.MainConfig.Launcher.NoTracking);
#endif

            #endregion

            #region 数据初始化
            Config.Environment env = Config.MainConfig.Environment;

            JavaList = Java.GetJavaList();

            //设置版本路径
            string gameroot = null;
            switch (env.GamePathType)
            {
            case GameDirEnum.ROOT:
                gameroot = Path.GetFullPath(".minecraft");
                break;

            case GameDirEnum.APPDATA:
                gameroot = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData) + "\\.minecraft";
                break;

            case GameDirEnum.PROGRAMFILES:
                gameroot = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + "\\.minecraft";
                break;

            case GameDirEnum.CUSTOM:
                gameroot = env.GamePath + "\\.minecraft";
                break;

            default:
                throw new ArgumentException("判断游戏目录类型时出现异常,请检查配置文件中GamePathType节点");
            }
            LogHandler.AppendInfo("核心初始化->游戏根目录(默认则为空):" + gameroot);

            //设置JAVA
            Java java = null;
            if (env.AutoJava)
            {
                java = Java.GetSuitableJava(JavaList);
            }
            else
            {
                java = JavaList.Find(x => x.Path == env.JavaPath);
                if (java == null)
                {
                    java = Java.GetJavaInfo(env.JavaPath);
                }
            }
            if (java != null)
            {
                env.JavaPath = java.Path;
                LogHandler.AppendInfo("核心初始化->Java路径:" + java.Path);
                LogHandler.AppendInfo("核心初始化->Java版本:" + java.Version);
                LogHandler.AppendInfo("核心初始化->Java位数:" + java.Arch);
            }
            else
            {
                LogHandler.AppendWarn("核心初始化失败,当前电脑未匹配到JAVA");
            }

            //设置版本独立
            bool verIso = Config.MainConfig.Environment.VersionIsolation;
            #endregion

            #region 启动核心初始化
            Handler          = new LaunchHandler(gameroot, java, verIso);
            Handler.GameLog += (s, log) => LogHandler.AppendLog(s, new Log()
            {
                LogLevel = LogLevel.GAME, Message = log
            });
            Handler.LaunchLog += (s, log) => LogHandler.AppendLog(s, log);
            #endregion

            #region  载核心初始化
            ServicePointManager.DefaultConnectionLimit = 10;

            Download downloadCfg = Config.MainConfig.Download;
            Downloader = new MultiThreadDownloader();
            if (!string.IsNullOrWhiteSpace(downloadCfg.DownloadProxyAddress))
            {
                WebProxy proxy = new WebProxy(downloadCfg.DownloadProxyAddress, downloadCfg.DownloadProxyPort);
                if (!string.IsNullOrWhiteSpace(downloadCfg.ProxyUserName))
                {
                    NetworkCredential credential = new NetworkCredential(downloadCfg.ProxyUserName, downloadCfg.ProxyUserPassword);
                    proxy.Credentials = credential;
                }
                Downloader.Proxy = proxy;
            }
            Downloader.ProcessorSize = App.Config.MainConfig.Download.DownloadThreadsSize;
            Downloader.CheckFileHash = App.Config.MainConfig.Download.CheckDownloadFileHash;
            Downloader.DownloadLog  += (s, log) => LogHandler?.AppendLog(s, log);
            #endregion

            #region 自定义主题初始化
            var custom = Config.MainConfig.Customize;
            if (!string.IsNullOrWhiteSpace(custom.AccentColor) && !string.IsNullOrWhiteSpace(custom.AppThme))
            {
                LogHandler.AppendInfo("自定义->更改主题颜色:" + custom.AccentColor);
                LogHandler.AppendInfo("自定义->更改主题:" + custom.AppThme);
                ThemeManager.ChangeAppStyle(Current, ThemeManager.GetAccent(custom.AccentColor), ThemeManager.GetAppTheme(custom.AppThme));
            }
            #endregion

            #region 读取版本
            VersionList = new ObservableCollection <Version>();
            RefreshVersionList();
            #endregion
        }
示例#8
0
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11;
            Process[] myProcesses = Process.GetProcessesByName("NsisoLauncher");//获取指定的进程名
            bool      self        = false;

            foreach (var item in myProcesses)
            {
                if (item.MainModule.FileName == AppDomain.CurrentDomain.BaseDirectory + AppDomain.CurrentDomain.FriendlyName)
                {
                    if (self == false)
                    {
                        self = true;
                    }
                    else
                    {
                        SetForegroundWindow(item.MainWindowHandle);
                        Shutdown();
                    }
                }
            }

            LogHandler = new LogHandler(true);
            Config     = new ConfigHandler();
            EnvironmentObj env = Config.MainConfig.Environment;

            JavaList = Java.GetJavaList();

            AggregateExceptionCatched += (a, b) => LogHandler.AppendFatal(b.AggregateException);

            if (Config.MainConfig.Launcher.Debug || e.Args.Contains("-debug"))
            {
                DebugWindow debugWindow = new DebugWindow();
                debugWindow.Show();
                LogHandler.OnLog += (s, log) => debugWindow?.AppendLog(s, log);
            }

            nsisoAPIHandler = new APIHandler(Config.MainConfig.Launcher.NoTracking);

            //设置版本路径
            string gameroot = null;

            switch (env.GamePathType)
            {
            case GameDirEnum.ROOT:
                gameroot = Path.GetFullPath(".minecraft");
                break;

            case GameDirEnum.APPDATA:
                gameroot = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\.minecraft";
                break;

            case GameDirEnum.PROGRAMFILES:
                gameroot = System.Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + "\\.minecraft";
                break;

            case GameDirEnum.CUSTOM:
                gameroot = env.GamePath + "\\.minecraft";
                break;

            default:
                throw new ArgumentException("判断游戏目录类型时出现异常,请检查配置文件中GamePathType节点");
            }
            LogHandler.AppendInfo("核心初始化->游戏根目录(默认则为空):" + gameroot);

            //设置JAVA
            Java java;

            if (env.AutoJava)
            {
                java = Java.GetSuitableJava(JavaList);
            }
            else
            {
                java = JavaList.Find(x => x.Path == env.JavaPath);
                if (java == null)
                {
                    java = Java.GetJavaInfo(env.JavaPath);
                }
            }
            if (java != null)
            {
                env.JavaPath = java.Path;
                LogHandler.AppendInfo("核心初始化->Java路径:" + java.Path);
                LogHandler.AppendInfo("核心初始化->Java版本:" + java.Version);
                LogHandler.AppendInfo("核心初始化->Java位数:" + java.Arch);
            }
            else
            {
                LogHandler.AppendWarn("核心初始化失败,当前电脑未匹配到JAVA");
            }

            bool verIso = Config.MainConfig.Environment.VersionIsolation;

            Handler          = new LaunchHandler(gameroot, java, verIso);
            Handler.GameLog += (s, log) => LogHandler.AppendLog(s, new Log()
            {
                LogLevel = LogLevel.GAME, Message = log
            });
            Handler.LaunchLog += (s, log) => LogHandler.AppendLog(s, log);

            ServicePointManager.DefaultConnectionLimit = 10;

            Downloader = new MultiThreadDownloader();

            ProxyRe();

            Downloader.ProcessorSize = Config.MainConfig.Download.DownloadThreadsSize;
            Downloader.CheckFileHash = Config.MainConfig.Download.CheckDownloadFileHash;
            Downloader.DownloadLog  += (s, log) => LogHandler?.AppendLog(s, log);

            var custom = Config.MainConfig.Customize;

            if (!string.IsNullOrWhiteSpace(custom.AppThme))
            {
                LogHandler.AppendInfo("自定义->更改主题:" + custom.AppThme);
                ThemeManager.Current.ChangeTheme(Current, custom.AppThme);
            }

            Lauguage();
        }
示例#9
0
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="downloading"></param>
        /// <param name="urls"></param>
        /// <param name="path"></param>
        /// <param name="localFileName"></param>
        /// <returns></returns>
        private bool DownloadByBuiltin(DownloadingItem downloading, List <string> urls, string path, string localFileName)
        {
            // path已斜杠结尾,去掉斜杠
            path = path.TrimEnd('/').TrimEnd('\\');

            foreach (var url in urls)
            {
                // 创建下载器
                var mtd = new MultiThreadDownloader(url,
                                                    Environment.GetEnvironmentVariable("temp"),
                                                    Path.Combine(path, localFileName),
                                                    SettingsManager.GetInstance().GetSplit());
                // 配置网络请求
                mtd.Configure(req =>
                {
                    req.CookieContainer = LoginHelper.GetLoginInfoCookies();
                    req.UserAgent       = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36";
                    req.Referer         = "https://www.bilibili.com";
                    req.Headers.Add("Origin", "https://www.bilibili.com");

                    if (SettingsManager.GetInstance().IsHttpProxy() == AllowStatus.YES)
                    {
                        req.Proxy = new WebProxy(SettingsManager.GetInstance().GetHttpProxy(),
                                                 SettingsManager.GetInstance().GetHttpProxyListenPort());
                    }
                });

                // 下载进度回调
                mtd.TotalProgressChanged += (sender, e) =>
                {
                    try
                    {
                        // 状态更新
                        var downloader = sender as MultiThreadDownloader;

                        // 下载进度百分比
                        float percent = downloader.TotalProgress;

                        // 根据进度判断本次是否需要更新UI
                        if (Math.Abs(percent - downloading.Progress) < 0.01)
                        {
                            return;
                        }
                        if (Math.Abs(percent - downloading.Progress) > 5)
                        {
                            return;
                        }

                        // 下载进度
                        downloading.Progress = percent;

                        // 下载大小
                        downloading.DownloadingFileSize = Format.FormatFileSize(downloader.TotalBytesReceived) + "/" + Format.FormatFileSize(downloader.Size);

                        // 下载速度
                        long speed = (long)downloader.TotalSpeedInBytes;

                        // 下载速度显示
                        downloading.SpeedDisplay = Format.FormatSpeed(speed);

                        // 最大下载速度
                        if (downloading.Downloading.MaxSpeed < speed)
                        {
                            downloading.Downloading.MaxSpeed = speed;
                        }
                    }
                    catch (InvalidOperationException ex)
                    {
                        Core.Utils.Debugging.Console.PrintLine($"{Tag}.DownloadByBuiltin()发生InvalidOperationException异常: {0}", ex);
                        LogManager.Error($"{Tag}.DownloadByBuiltin()", ex);
                    }
                    catch (Exception ex)
                    {
                        Core.Utils.Debugging.Console.PrintLine($"{Tag}.DownloadByBuiltin()发生异常: {0}", ex);
                        LogManager.Error($"{Tag}.DownloadByBuiltin()", ex);
                    }
                };

                // 文件合并完成回调
                bool isComplete = false;
                mtd.FileMergedComplete += (sender, e) =>
                {
                    // 跳出循环
                    if (File.Exists(Path.Combine(path, localFileName)))
                    {
                        isComplete = true;
                    }
                };

                // 开始下载
                mtd.StartAsync();

                // 阻塞当前任务,监听暂停事件
                while (!isComplete)
                {
                    cancellationToken.ThrowIfCancellationRequested();
                    switch (downloading.Downloading.DownloadStatus)
                    {
                    case DownloadStatus.PAUSE:
                        // 暂停下载
                        mtd.Pause();
                        // 通知UI,并阻塞当前线程
                        Pause(downloading);
                        break;

                    case DownloadStatus.DOWNLOADING:
                        break;
                    }

                    Thread.Sleep(100);
                }
                return(isComplete);
            }

            return(false);
        }