/// <summary> /// 添加任务 /// </summary> /// <param name="poltConfig"></param> /// <param name="chiaSetting"></param> /// <returns></returns> public static int SaveTask(string id, PoltConfig poltConfig, ChiaSetting chiaSetting) { ChinPoltTask _task = null; if (string.IsNullOrEmpty(id)) { _task = new ChinPoltTask() { completeNumber = 0, currentProgress = "--/--", id = Guid.NewGuid().ToString(), poltConfig = poltConfig, chiaSetting = chiaSetting, status = TaskStatusEnum.Stop }; //任务开始前检查硬盘空间状态 _task.BeforeTaskStart += (sender => { return(CheckedTaskHardDiskFreeSpace(sender)); }); ChinPoltTasks.Add(_task); } else { _task = ChinPoltTasks.FirstOrDefault(f1 => f1.id == id); _task.Stop(); _task.chiaSetting = chiaSetting; _task.poltConfig = poltConfig; } Task.Factory.StartNew(() => _task.Start(new System.Threading.CancellationTokenSource())); return(0); }
/// <summary> /// 关闭时保存基础设置 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { ChiaSetting.SaveConfig(chiaSetting); bool isRuning = ChiaPoltTaskFactory.ChinPoltTasks.Any(a1 => a1.status == TaskStatusEnum.Runing); ChiaPoltTaskFactory.ChinPoltTasks?.ForEach(f1 => f1.Stop()); if (isRuning) { Task.Factory.StartNew(() => { do { System.Threading.Thread.Sleep(1500); }while (ChiaPoltTaskFactory.ChinPoltTasks.Any(a1 => a1.status == TaskStatusEnum.Runing)); Application.Exit(); }); e.Cancel = true; } }
/// <summary> /// 界面加载(加载配置信息) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FormMain_Load(object sender, EventArgs e) { chiaSetting = ChiaSetting.LoadConfig() ?? new ChiaSetting() { poltConfig = new List <PoltConfig>() }; ChiaPoltTaskFactory.StopChiaThread(); chiaSetting?.poltConfig.ForEach(f1 => { ChiaPoltTaskFactory.SaveTask(string.Empty, f1, chiaSetting); }); OnShow(); this.txt_chiapath.Text = chiaSetting.setupPath; this.txt_pf.Text = chiaSetting.farmerPublicKey; this.txt_pp.Text = chiaSetting.poolPublicKey; ChiaPoltTaskFactory.TaskStatusChangeEvent += (data) => { this.Invoke((EventHandler)(delegate { OnShow(); })); }; }