private void FillDatagrid1() { if (selectedPort != null) { selectedPort.sp.Close(); selectedPort = null; } //очищаем все dataGridView1.Rows.Clear(); for (int i = 0; i < manager.activeComs.Count; i++) { //заполняем датагрид dataGridView1.Rows.Add(); dataGridView1.Rows[i].Cells["number"].Value = i; dataGridView1.Rows[i].Cells["ComPortName"].Value = manager.activeComs[i].Name; dataGridView1.Rows[i].Cells["isOpen"].Value = manager.activeComs[i].sp.IsOpen; CheckOpen(i); } }
/// <summary> /// Проверка, является ли последовательный порт блоком модема (с использованием потоков) /// </summary> /// <param name="name">имя порта</param> public void CheckSerial(object n) { string name = (string)n; SmsModemBlock mySerialPort = new SmsModemBlock(name); mySerialPort.ModemMode = Mode.Check; if (!mySerialPort.sp.IsOpen) { mySerialPort.sp.Open(); } mySerialPort.sp.WriteLine("AT \r\n"); System.Threading.Thread.Sleep(500); mySerialPort.sp.Close(); if (mySerialPort.isRecieved) { activeComsQueue.Enqueue(new SmsModemBlock(name)); // завершаем текущий поток Thread.CurrentThread.Abort(); } }
// выбор конкретного порта private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { var senderGrid = (DataGridView)sender; //var senderRow = senderGrid.CurrentRow.Index; try { selectedPort.sp.Close(); } catch { //если порт не был выбран до этого } if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0) { try { //обработка выбора СОМ-порта var portName = senderGrid.Rows[e.RowIndex].Cells["ComPortName"].Value.ToString(); //MessageBox.Show(string.Format("Выбран порт {0}", portName)); selectedPort = manager.GetBlockByName(portName); selectedPortName.Text = selectedPort.Name; selectedPort.sp.Open(); selectedPort.MF = this; foreach (DataGridViewRow row in senderGrid.Rows) { CheckOpen(row.Index); } } catch (NullReferenceException) { MessageBox.Show("Ничего не выбрано!"); } } }