using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.XtraEditors; using ExtensionsDev; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; namespace XdCxRhDw.CpuCgTools { public partial class FormCpuCg : DevExpress.XtraEditors.XtraForm { public class CgParam { public string F1 { get; set; } public string F2 { get; set; } public string snr { get; set; } public string dfoCenter { get; set; } public string dfoRange { get; set; } public string dtoXb { get; set; } public string dfoXb { get; set; } public string thread { get; set; } public string addZero { get; set; } public string start { get; set; } public string len { get; set; } public string dtoCenter { get; set; } public string dtoRange { get; set; } public string fs { get; set; } } public class CgRes { [Display(Name = "文件1")] public string File1 { get; set; } [Display(Name = "文件2")] public string File2 { get; set; } [Display(Name = "时差(us)")] public double Dto { get; set; } [Display(Name = "频差(us)")] public double Dfo { get; set; } [Display(Name = "信噪比(dB)")] public double Snr { get; set; } [Display(Name = "耗时(ms)")] public int CostTimeMs { get; set; } } List list = new List(); public FormCpuCg() { InitializeComponent(); } private void XtraForm1_Load(object sender, EventArgs e) { gridControl1.Init().UseExportCsv().UseExportXlsx(); gridControl1.DataSource = list; txtF1.UseChooseFile(); txtF2.UseChooseFile(); if (File.Exists("tmp.txt")) { var obj = Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText("tmp.txt")); txtAddZero.Text = obj.addZero; txtDfoCenter.Text = obj.dfoCenter; txtDfoRange.Text = obj.dfoRange; txtDfoXb.Text = obj.dfoXb; txtDtoCenter.Text = obj.dtoCenter; txtDtoRange.Text = obj.dtoRange; txtDtoXb.Text = obj.dtoXb; txtF1.Text = obj.F1; txtF2.Text = obj.F2; txtFs.Text = obj.fs; txtLen.Text = obj.len; txtSnr.Text = obj.snr; txtStart.Text = obj.start; txtThread.Text = obj.thread; } } private async void btnCalc_Click(object sender, EventArgs e) { this.tablePanel1.Enabled = false; await Task.Run(() => { try { Stopwatch sw = new Stopwatch(); sw.Start(); Process p = new Process(); p.StartInfo.WorkingDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Core"); p.StartInfo.FileName = Path.Combine(p.StartInfo.WorkingDirectory, "coc.exe"); string snr = ""; if (!string.IsNullOrWhiteSpace(txtSnr.Text)) snr = $"-s {txtSnr.Text} "; string dfoCenter = ""; if (!string.IsNullOrWhiteSpace(txtDfoCenter.Text)) dfoCenter = $"-c {txtDfoCenter.Text} "; string dfoRange = ""; if (!string.IsNullOrWhiteSpace(txtDfoRange.Text)) dfoRange = $"-r {txtDfoRange.Text} "; string dtoXb = ""; if (!string.IsNullOrWhiteSpace(txtDtoXb.Text)) dtoXb = $"-t {txtDtoXb.Text} "; string dfoXb = ""; if (!string.IsNullOrWhiteSpace(txtDfoXb.Text)) dfoXb = $"-f {txtDfoXb.Text} "; string thread = ""; if (!string.IsNullOrWhiteSpace(txtThread.Text)) thread = $"-p {txtThread.Text} "; else thread = $"-p {Environment.ProcessorCount} "; string addZero = ""; if (!string.IsNullOrWhiteSpace(txtAddZero.Text)) addZero = $"-z {txtAddZero.Text} "; string slot = ""; if (!string.IsNullOrWhiteSpace(txtStart.Text) && !string.IsNullOrWhiteSpace(txtLen.Text)) slot = $"-x {txtStart.Text},{txtLen.Text}"; if (!string.IsNullOrWhiteSpace(txtStart.Text) && (string.IsNullOrWhiteSpace(txtLen.Text) || Convert.ToInt32(txtLen.Text) <= 0)) { FileInfo f1 = new FileInfo(txtF1.Text); FileInfo f2 = new FileInfo(txtF2.Text); long size = f1.Length; if (f1.Length > f2.Length) size = f2.Length; size /= 4;//IQ文件一个样点4个字节 var len = size - Convert.ToInt32(txtStart.Text); slot = $"-x {txtStart.Text},{len}"; } CgParam cp = new CgParam() { addZero = txtAddZero.Text, dfoCenter = txtDfoCenter.Text, dfoRange = txtDfoRange.Text, dfoXb = txtDfoXb.Text, dtoCenter = txtDtoCenter.Text, dtoRange = txtDtoRange.Text, dtoXb = txtDtoXb.Text, F1 = txtF1.Text, F2 = txtF2.Text, fs = txtFs.Text, len = txtLen.Text, snr = txtSnr.Text, start = txtStart.Text, thread = txtThread.Text, }; var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(cp); File.WriteAllText("tmp.txt", jsonStr); p.StartInfo.Arguments = $"\"{txtF1.Text}\" \"{txtF2.Text}\" {txtFs.Text} {txtDtoCenter.Text} {txtDtoRange.Text} {snr}{dfoCenter}{dfoRange}{dtoXb}{dfoXb}{thread}{addZero}{slot}"; p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.UseShellExecute = false; p.Start(); p.WaitForExit(); var str = p.StandardOutput.ReadToEnd(); sw.Stop(); var arr = str.Split("\t".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); var costTimeMs = Convert.ToInt32(arr[4]); var tmp = arr[5].Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); var dt = Math.Round(Convert.ToDouble(tmp[0]), 3); var df = Math.Round(Convert.ToDouble(tmp[1]), 1); var snrRes = Math.Round(Convert.ToDouble(tmp[2].Replace(";", "")), 1); list.Add(new CgRes() { File1 = txtF1.Text, File2 = txtF2.Text, CostTimeMs = costTimeMs, Dto = dt, Dfo = df, Snr = snrRes }); } catch (Exception ex) { Serilog.Log.Error("参估计算出错", ex); this.Invoke(new Action(() => XtraMessageBox.Show("参估计算出错"))); } }); this.gridView1.RefreshData(); this.tablePanel1.Enabled = true; } } }