示例#1
0
        //运行脚本
        //运行脚本需要判断当前连接了几个串口,然后针对于每个串口需要新建一个窗口,每个串口对应一接收数据的线程。
        //所有的串口发送数据只用一个线程,先解析脚本,将所有需要发送的数据添加到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();
        }