public void updateData(bool bUpdateDelay = false) { Dictionary <string, gpioPin> m; lock (m_GPIO_values) { m = new Dictionary <string, gpioPin>(m_GPIO_values); } if (m_GPIO_DataTable.Rows.Count < m.Count) { m_GPIO_DataTable.Rows.Add(m.Count - m_GPIO_DataTable.Rows.Count); } int rowIndex = 0; foreach (KeyValuePair <String, gpioPin> i in m) { gpioPin pin = i.Value; if (bUpdateDelay && pin.isChanged()) { lock (m_GPIO_values) { pin = m_GPIO_values[i.Key]; pin.tickChange(); m_GPIO_values[i.Key] = pin; } m_GPIO_DataTable.InvalidateRow(rowIndex); } ++rowIndex; } }
/* table */ private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { int rowIndex = e.RowIndex; int cellIndex = e.ColumnIndex; if (rowIndex < 0 || cellIndex < 0) { return; } gpioPin pin = getRowPin(rowIndex); if (pin.rowDisable) { e.CellStyle.BackColor = Color.LightGray; return; } String cellValue = pin.Value; Color bkColor = Color.White; Color textColor = Color.Black; DataGridView view = (DataGridView)sender; String cName = view.Columns[cellIndex].Name; // DataGridViewCell cell = view.Rows[rowIndex].Cells[cellIndex]; switch (cName) { case "GPIO": try { bkColor = m_GPIO_color[pin.Value]; } catch (Exception) { } break; case "Value": if (pin.isChanged()) { bkColor = Color.Red; textColor = Color.White; } break; default: if (pin.Value.Length != gpioPin.g_pins.Length) { if (pin.isChanged()) { bkColor = Color.Red; textColor = Color.White; } break; } int nPin = pin.getPinIndex(cName); if (nPin >= 0 && pin.IsChangedPin(nPin)) { bkColor = Color.Red; textColor = Color.White; } break; } e.CellStyle.BackColor = bkColor; e.CellStyle.ForeColor = textColor; }