SignalDdcMainCtrl.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using DevExpress.XtraEditors;
  2. using Ips.Ddc;
  3. using Ips.Library.Basic;
  4. using Ips.Library.DxpLib;
  5. using Ips.Library.Entity;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.ComponentModel;
  9. using System.Data;
  10. using System.Diagnostics;
  11. using System.Drawing;
  12. using System.IO;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Text.Json;
  16. using System.Threading.Tasks;
  17. using System.Windows.Forms;
  18. namespace Ips.Sps.Tools.SignalDdces
  19. {
  20. public partial class SignalDdcMainCtrl : DevExpress.XtraEditors.XtraUserControl
  21. {
  22. public SignalDdcMainCtrl()
  23. {
  24. InitializeComponent();
  25. FsButtonEdit.SetUnitText("M");
  26. gvMain.UseDefaultSettings(new GridViewDefaultSetting()
  27. {
  28. Editable = true,
  29. DefaultEmptyDisplayText = false,
  30. ShowRowNum = true
  31. });
  32. }
  33. string vmfile = Path.Combine(SpsConst.VmFolder, "signalddc.json");
  34. SignalDdcViewModel vm;
  35. private void SignalDdcMainCtrl_Load(object sender, EventArgs e)
  36. {
  37. if (File.Exists(vmfile))
  38. {
  39. vm = JsonSerializer.Deserialize<SignalDdcViewModel>(File.ReadAllText(vmfile));
  40. }
  41. else
  42. {
  43. vm = new SignalDdcViewModel();
  44. }
  45. bsMain.DataSource = vm;
  46. }
  47. private void FileInButtonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
  48. {
  49. FileInButtonEdit.EditValue = ToolDialog.OpenFile("", "选择输入文件");
  50. }
  51. private void OutDirButtonEdit_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
  52. {
  53. OutDirButtonEdit.EditValue = ToolDialog.OpenFolder("选择输出路径");
  54. }
  55. private void btnDdc_Click(object sender, EventArgs e)
  56. {
  57. string jsonText = JsonSerializer.Serialize(vm, new JsonSerializerOptions() { WriteIndented = true });
  58. File.WriteAllText(vmfile, jsonText);
  59. if (ValidateParams() == false) return;
  60. btnDdc.Enabled = false;
  61. var fileIn = vm.FileIn;
  62. var fs = vm.Fs.E6l();
  63. var outdir = vm.OutDir;
  64. var ddcItems = vm.DdcItems.Where(m => m.Mutil > 1)
  65. .Select(m => new DdcSigItem(m.Ffc.E6l(), m.Mutil))
  66. .ToList();
  67. Task.Run(() =>
  68. {
  69. var res = DdcUtil.ExecAsync(fileIn, fs, outdir, ddcItems, vm.Real, vm.Gpu).Result;
  70. return res;
  71. }).ContinueWith(t =>
  72. {
  73. //this.Invoke(() =>
  74. //{
  75. btnDdc.Enabled = true;
  76. try
  77. {
  78. var res = t.Result as ExeResult<string>;
  79. if (res == null) return;
  80. if (res.ExitCode == 0)
  81. {
  82. Process.Start("explorer", outdir);
  83. }
  84. else
  85. {
  86. MsgHelper.ShowError("信道化异常,错误消息:" + res.ExitMsg);
  87. }
  88. }
  89. catch (Exception ex)
  90. {
  91. this.Invoke(() =>
  92. {
  93. MsgHelper.ShowError("信道化出错,错误消息:" + ex.Message);
  94. });
  95. }
  96. // });
  97. }, TaskScheduler.FromCurrentSynchronizationContext());
  98. }
  99. private bool ValidateParams()
  100. {
  101. dxError.ClearErrors();
  102. if (vm.FileIn.IsNullOrWhitespace() || !File.Exists(vm.FileIn))
  103. dxError.SetError(FileInButtonEdit, "输入文件不存在");
  104. if (vm.OutDir.IsNullOrWhitespace() || !Directory.Exists(vm.OutDir))
  105. dxError.SetError(OutDirButtonEdit, "输出目录不存在");
  106. if (vm.Fs <= 1 * 1e-6)
  107. dxError.SetError(FsButtonEdit, "采样率必须大于0");
  108. var ddcitems = vm.DdcItems.Where(m => m.Mutil < 2).ToList();
  109. if (ddcitems.IsNullOrEmpty())
  110. dxError.SetError(grdMain, "信号列表不能为空");
  111. return !dxError.HasErrors;
  112. }
  113. }
  114. }