//运行脚本 //运行脚本需要判断当前连接了几个串口,然后针对于每个串口需要新建一个窗口,每个串口对应一接收数据的线程。 //所有的串口发送数据只用一个线程,先解析脚本,将所有需要发送的数据添加到list中,然后循环发送所有的CMD。 private void RunBtn_Click(object sender, EventArgs e) { if (PortList.Count == 0) { MessageBox.Show("please open serial port first !!!", "WARNING", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } RunBtn.Enabled = false; SendToolStripButton.Enabled = false; //ManualFlag = -1; WriteDataList.Clear(); PageLength.Clear(); ComDataPath.Clear(); //处理脚本 if (!ScriptIdentify()) { RunBtn.Enabled = true; SendToolStripButton.Enabled = true; return; } int i = 5, j = 5; //遍历每个串口 foreach (SerialPort port in PortList.Values) { if (!SerialToPath.ContainsKey(port.PortName)) { //创建输出打印框 PrintLog PortLogBox = new PrintLog(); PortLogBox.Top = i; PortLogBox.Left = j; PortLogBox.Text = port.PortName; PortLogBox.Show(); //创建写入本地文件句柄 CreateFileHandle(port.PortName); //接收数据线程 BackgroundWorker backgroundWorker = new BackgroundWorker(); backgroundWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.RecvData_DoWork); SerialToTextBox Argument = new SerialToTextBox(port, PortLogBox.PrintLogBox); backgroundWorker.RunWorkerAsync(Argument); i += 20; j += 20; } this.Activate(); } flashToolStripMenuItem.Enabled = false; //发送数据线程 BackgroundWorker SendWoker = new BackgroundWorker(); SendWoker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.SendData_DoWork); IsRecvSingle = true; SendWoker.RunWorkerAsync(); }