using DevExpress.XtraEditors; using DevExpress.XtraSpreadsheet.Import.Xls; using Ips.Library.Basic; using Ips.Library.DxpLib; using Ips.Library.Entity; using Ips.Library.LocLib; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using System.Windows.Forms; namespace Ips.Sps.Tools.Xdcs { public partial class XdcMainCtrl : DevExpress.XtraEditors.XtraUserControl { public XdcMainCtrl() { InitializeComponent(); FileInButtonEdit.SetFileOpen(filter: FileFilterString.Dat); FsButtonEdit.SetUnitText("M"); FileOutButtonEdit.SetFileSave(filter: FileFilterString.Dat); gvMain.UseDefaultSettings(new GridViewDefaultSetting() { Editable = true, ShowRowNum = true }); } string vmfile = Path.Combine(SpsConst.VmFolder, "xdcparam.json"); XdcViewModel vm; CancellationTokenSource cts; private void XdcMainCtrl_Load(object sender, EventArgs e) { if (File.Exists(vmfile)) { vm = JsonSerializer.Deserialize(File.ReadAllText(vmfile)); } else { vm = new XdcViewModel(); } bsMain.DataSource = vm; } private async void btnExcute_Click(object sender, EventArgs e) { if (ValidateModelState()) return; File.WriteAllText(vmfile, JsonSerializer.Serialize(vm)); btnExcute.Enabled = false; btnStop.Enabled = true; cts?.Dispose(); cts = new CancellationTokenSource(); try { var dxitems = vm.SigList.Select(m => new XdcItem(m.Ffc, m.BandWidth, m.ModuType)).ToArray(); var result = await XdcUtil.ExecuteAsync(vm.FileIn, vm.FileOut, vm.Fs, dxitems, vm.Th, token: cts.Token); if (result.ExitCode == 0) { MsgHelper.ShowMsg($"对消处理完成,耗时:{result.RunTime.TotalSeconds:F2}秒"); } //await Task.Delay(3000); } catch (Exception ex) { ex.HandleCancelEx(ex => { MsgHelper.ShowError(ex.Message, ex); }); } finally { btnExcute.Enabled = true; btnStop.Enabled = false; } } private void btnStop_Click(object sender, EventArgs e) { cts?.Cancel(); } private void btnSaveConfig_Click(object sender, EventArgs e) { string fileName = ToolDialog.SaveFile($"对消参数{DateTime.Now:yyyyMMddHHmmss}.json", "保存对消参数", filter: FileFilterString.Json); if (fileName.IsNullOrWhitespace()) return; JsonSerializerOptions jsonOpt = new JsonSerializerOptions() { WriteIndented = true }; string content = JsonSerializer.Serialize(vm, jsonOpt); File.WriteAllText(fileName, content); } private void btnImportConfig_Click(object sender, EventArgs e) { string fileName = ToolDialog.OpenFile("", "导入对消参数", filter: FileFilterString.Json); if (fileName.IsNullOrWhitespace()) return; try { string content = File.ReadAllText(fileName); vm = JsonSerializer.Deserialize(content); bsMain.DataSource = vm; } catch (Exception ex) { MsgHelper.ShowError(ex.Message, ex, "导入配置参数出错"); } } private bool ValidateModelState() { dxError.ClearErrors(); if (vm.FileIn.IsNullOrWhitespace() || !File.Exists(vm.FileIn)) { dxError.SetError(FileInButtonEdit, "输入文件不存在!"); } if (vm.Fs <= 0) { dxError.SetError(FsButtonEdit, "请输入正确的采样率!"); } if (vm.FileOut.IsNullOrWhitespace()) { dxError.SetError(FileOutButtonEdit, "请选择输出文件!"); } if (vm.SigList.IsNullOrEmpty()) { MsgHelper.ShowError("信号列表不能为空"); return true; } if (vm.SigList.Any(m => m.BandWidth == 0 || m.ModuType == ModuType.None)) { MsgHelper.ShowError("信号带宽不能为空,且调制方式不能为未知!"); return true; } return dxError.HasErrors; } } }