123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- using Microsoft.VisualBasic.Logging;
- using SnapshotWinFormsApp.Application;
- using SnapshotWinFormsApp.Application.Dtos;
- using SnapshotWinFormsApp.Application.Interfaces;
- using SnapshotWinFormsApp.Repository;
- using SnapshotWinFormsApp.Repository.Enum;
- using SnapshotWinFormsApp.Tools;
- using SqlSugar;
- using System.ComponentModel;
- using System.Configuration;
- using System.Globalization;
- using System.Reflection;
- namespace SnapshotWinFormsApp;
- public partial class MainForm : Form
- {
- private readonly DbSqlServer _sqlServerDB;
- private CancellationTokenSource? _cts;
- private EButtonStatusType _startButtonStatus;
- public static ManualResetEventSlim _pauseEvent = new ManualResetEventSlim(true);
- public MainForm(DbSqlServer dbSqlServer)
- {
- _startButtonStatus = EButtonStatusType.Start;
- _sqlServerDB = dbSqlServer;
- InitializeComponent();
- LoadCheckBox();
- LoadCityName();
- logTxt.AppendText("初始化完成\r\n");
- logTxt.AppendText("日志文件夹:" + Logs.Path() + "\r\n");
- startTimePicker.Format = DateTimePickerFormat.Custom;
- startTimePicker.CustomFormat = "yyyy年MM月dd日";
- endTimePicker.Format = DateTimePickerFormat.Custom;
- endTimePicker.CustomFormat = "yyyy年MM月dd日";
- }
- private void LoadCityName()
- {
- cityNameCbox.DataSource = ConfigurationManager.ConnectionStrings
- .Cast<ConnectionStringSettings>()
- .Where(setting => !string.IsNullOrEmpty(setting.ProviderName) && setting.ProviderName.Length < 8)
- .Select(setting => setting.ProviderName)
- .ToHashSet()
- .ToList<string>();
- cityNameCbox.DropDownStyle = ComboBoxStyle.DropDownList;
- }
- private void LoadCheckBox()
- {
- var types = Assembly.GetExecutingAssembly()
- .GetTypes()
- .Where(t => t.IsClass && t.Name.StartsWith("ImportApplicationBase") == false && !t.IsAbstract && typeof(IImportApplication).IsAssignableFrom(t))
- .ToList();
- int rowIndex = 3;
- int colIndex = 0;
- foreach (var type in types)
- {
- var descriptionAttr = type.GetCustomAttribute<DescriptionAttribute>();
- string description = descriptionAttr?.Description ?? type.Name;
- CheckBox checkBox = new CheckBox
- {
- Text = description,
- Tag = type,
- AutoSize = true
- };
- if (tableLayoutPanel1.RowCount <= rowIndex)
- {
- tableLayoutPanel1.RowCount = rowIndex + 1;
- tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.AutoSize));
- }
- tableLayoutPanel1.Controls.Add(checkBox, colIndex, rowIndex);
- colIndex++;
- if (colIndex > 1)
- {
- colIndex = 0;
- rowIndex++;
- }
- }
- }
- private async void OkBtn_Click(object sender, EventArgs e)
- {
- if (_startButtonStatus == EButtonStatusType.Start)
- {
- _startButtonStatus = EButtonStatusType.Pause;
- OkBtn.Text = "暂停";
- _cts = new CancellationTokenSource();
- var tasks = new List<Task>();
- foreach (var control in tableLayoutPanel1.Controls)
- {
- if (control is CheckBox checkBox && checkBox.Checked)
- {
- AddLog($"初始化任务 [{checkBox.Text}]...");
- Type type = (Type)checkBox.Tag;
- if (Activator.CreateInstance(type, new CreateInstanceInDto(_sqlServerDB, cityNameCbox.SelectedItem.ToString(), startTimePicker.Value, endTimePicker.Value, keyTxt.Text)) is IImportApplication instance)
- {
- tasks.Add(RunImport(instance, _cts.Token));
- }
- }
- }
- try
- {
- await Task.WhenAll(tasks);
- AddLog("所有任务完成");
- OkBtn.Text = "开始";
- _startButtonStatus = EButtonStatusType.Start;
- }
- catch (OperationCanceledException)
- {
- AddLog("任务已取消");
- OkBtn.Text = "开始";
- _startButtonStatus = EButtonStatusType.Start;
- }
- return;
- }
- if (_startButtonStatus == EButtonStatusType.Pause)
- {
- _startButtonStatus = EButtonStatusType.Wait;
- OkBtn.Text = "继续";
- _pauseEvent.Reset();
- return;
- }
- if (_startButtonStatus == EButtonStatusType.Wait)
- {
- _startButtonStatus = EButtonStatusType.Pause;
- OkBtn.Text = "暂停";
- _pauseEvent.Set();
- return;
- }
- }
- private async Task RunImport(IImportApplication instance, CancellationToken token)
- {
- await instance.ImportAsync(AddLog, token);
- }
- private void AddLog(string msg)
- {
- this.Invoke((EventHandler)delegate
- {
- this.logTxt.AppendText(msg + "\r\n");
- Logs.Note(msg);
- });
- }
- private void CancelBtn_Click(object sender, EventArgs e)
- {
- _cts?.Cancel();
- }
- }
|