Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 定时器最小值、最大值和C中的值#_C#_Mysql_Sql_Datagridview - Fatal编程技术网

C# 定时器最小值、最大值和C中的值#

C# 定时器最小值、最大值和C中的值#,c#,mysql,sql,datagridview,C#,Mysql,Sql,Datagridview,好吧,我知道这听起来很奇怪,但说实话,我确实记得我在c#中解决了一个计时器的例子,在这里我设置了计时器的minvalue、maxvalue、tick、interval等等。。。但我不记得/不知道如何再次这样做,MVS 2019不会显示这样的参数 任何帮助都将不胜感激 在datagridview(dg)从数据库中完全加载后,我试图基于第7个索引的值启动一行,但是,它工作不正常,要么某些行未加载,要么已加载,但O复杂性非常低(程序响应非常差) 没有这段代码,程序运行得很好,没有任何问题 下面是处理行

好吧,我知道这听起来很奇怪,但说实话,我确实记得我在c#中解决了一个计时器的例子,在这里我设置了计时器的minvalue、maxvalue、tick、interval等等。。。但我不记得/不知道如何再次这样做,MVS 2019不会显示这样的参数

任何帮助都将不胜感激

在datagridview(dg)从数据库中完全加载后,我试图基于第7个索引的值启动一行,但是,它工作不正常,要么某些行未加载,要么已加载,但O复杂性非常低(程序响应非常差)

没有这段代码,程序运行得很好,没有任何问题

下面是处理行颜色变化和闪烁的闪烁方法

   private void Blink(object o)
    {
        if (dg.Rows.Count != 0)
        {
            while (dg.Rows.Count >= 0 && go)
            {
                foreach (DataGridViewRow row in dg.Rows)
                {
                    int value = int.Parse(row.Cells[7].Value.ToString());
                    if (value == 0 || value == 1)
                    {
                        row.DefaultCellStyle.BackColor = Color.Red;
                    }
                    else if (value > 1 || value < 4)
                    {
                        row.DefaultCellStyle.BackColor = Color.Yellow;
                    }
                    else
                        row.DefaultCellStyle.BackColor = Color.Green;
                }
                go = true;
                Thread.Sleep(100);

                while (dg.Rows.Count != 0 && !go)
                {

                    foreach (DataGridViewRow row in dg.Rows)
                    {
                        int value1 = int.Parse(row.Cells[7].Value.ToString());
                        if (value1 == 0 || value1 == 1)
                        {
                            row.DefaultCellStyle.BackColor = Color.White;
                        }
                        else if (value1 > 1 || value1 < 4)
                        {
                            row.DefaultCellStyle.BackColor = Color.White;
                        }
                        else
                            row.DefaultCellStyle.BackColor = Color.White;
                    }
                    go = false;
                    Thread.Sleep(1000);
                }
            }
        }
    }
private void闪烁(对象o)
{
如果(dg.Rows.Count!=0)
{
而(dg.Rows.Count>=0&&go)
{
foreach(dg.Rows中的DataGridViewRow行)
{
int value=int.Parse(row.Cells[7].value.ToString());
如果(值==0 | |值==1)
{
row.DefaultCellStyle.BackColor=Color.Red;
}
否则如果(值>1 | |值<4)
{
row.DefaultCellStyle.BackColor=Color.Yellow;
}
其他的
row.DefaultCellStyle.BackColor=Color.Green;
}
去=真;
睡眠(100);
while(dg.Rows.Count!=0&&!go)
{
foreach(dg.Rows中的DataGridViewRow行)
{
int value1=int.Parse(row.Cells[7].Value.ToString());
如果(值1==0 | |值1==1)
{
row.DefaultCellStyle.BackColor=颜色.白色;
}
否则如果(值1>1 | |值1<4)
{
row.DefaultCellStyle.BackColor=颜色.白色;
}
其他的
row.DefaultCellStyle.BackColor=颜色.白色;
}
go=假;
睡眠(1000);
}
}
}
}

我不想劝阻您这样做,但是,如果您能让我放纵一下,因为我很难理解“为什么”,您可能希望行在短时间内“闪烁”。这对我来说似乎很奇怪,如下所述

我对“眨眼的”一行有点怀疑。我不知道这是怎么回事 “闪烁”行5秒“有助于”用户考虑 最后,行颜色将更改为特定颜色。我个人 认为“眨眼”是分心/烦人的,没有任何作用。 当然,当数据加载到时,可能有“几”行“闪烁” 指出这些行有问题。但即便如此,也很容易做到 想象一下,用户在那一刻移开视线,错过了“闪烁” 行以及低于可见网格大小的行呢? “眨眼”这些行毫无意义。所以,我不明白“什么 “目的”此“闪烁”行用于什么?我想这会让你 如果在用户纠正错误之前“闪烁”从未停止,则更有意义 有问题的数据

话虽如此,我建议您更仔细地了解一下您目前拥有的代码。这种代码方法可能很好地工作,但是在我的测试中,我相信UI会表现得很慢,响应也会很慢。例如,如果在任一方向上滚动栅格,您将注意到显示是多么缓慢、跳跃,并且不像预期的那样平滑。此外,如果您编辑一个单元格并按“回车”键,您将注意到一个延迟…需要一两秒钟才能下拉到下一个单元格

这主要是因为
Blink
代码是从网格的
CellPainting
事件执行的。网格的
CellPainting
事件经常被触发。当所有单元格均未更改时,它将启动。例如,如果用户“滚动”网格。因此,
闪烁
代码将不必要地运行,因为没有单元格发生更改。换句话说,当行已经是正确的颜色时,
Blink
方法可以运行并更改行的背面颜色。这是造成经济停滞的原因。代码运行
Blink
方法的次数比需要的次数多得多

您可能会说…“我在另一个线程下运行
Blink
方法。”…使用

Thread thread = new Thread(Blink);
thread.Start();
您可能是对的……然而,这实际上“制造”了更多与UI迟钝相关的问题。如果你退一步看看这个,你应该问问自己……“我需要多少线程?”…这段代码实际上是在“创建”成百上千的
线程,
只使用一次,从不处理它们

例如,假设数据有三(3)列和二十(20)行。将数据加载到网格中时,网格的
CellPainting
事件将至少触发六十(60)次(每个单元格一次)。(我相信它实际上会触发更多的线程),但是,即使是60次,这也意味着代码至少会创建60个“独立”线程,这些线程永远不会被处理。尽管如此,崩盘并不令人惊讶

如果代码在某个地方正确地处理了线程,您可能会稍微缓解这种情况,但是,在代码当前状态下,这是不可能的,因为
线程
已“创建”、已启动,并且从未在同一
if
语句中处理。一旦退出
if
语句,变量
thread
将超出范围(未正确处理)

当然,一次
Thread thread = new Thread(Blink);
thread.Start();
private void SetRowColor(DataGridViewRow row, bool white) {
  if (row.IsNewRow) {
    return;
  }
  if (white) {
    row.DefaultCellStyle.BackColor = Color.White;
  }
  else {
    if (int.TryParse(row.Cells["TargetColumn"].Value.ToString(), out int value)) {
      switch (value) {
        case 0:
        case 1:
          row.DefaultCellStyle.BackColor = Color.Red;
          break;
        case 2:
        case 3:
          row.DefaultCellStyle.BackColor = Color.Yellow;
          break;
        default:
          row.DefaultCellStyle.BackColor = Color.LightGreen;
          break;
      }
    }
  }
}
private void Blink() {
  if (ColorOn) {
    foreach (DataGridViewRow row in dg.Rows) {
      SetRowColor(row, false);
    }
  }
  else {
    foreach (DataGridViewRow row in dg.Rows) {
      SetRowColor(row, true);
    }
  }
}
private void MilliSecondTimer_Tick(object sender, EventArgs e) {
  Blink();
  ColorOn = !ColorOn;
}
private void FiveSecondTimer_Tick(object sender, EventArgs e) {
  MilliSecondTimer.Stop();
  FiveSecondTimer.Stop();
  ColorOn = true;
  Blink();
}
private void StartTimers() {
  FiveSecondTimer.Interval = 5000;
  MilliSecondTimer.Interval = 500;
  FiveSecondTimer.Tick += new EventHandler(FiveSecondTimer_Tick);
  MilliSecondTimer.Tick += new EventHandler(MillSecondTimer_Tick);
  MilliSecondTimer.Start();
  FiveSecondTimer.Start();
}
private DataTable GetDT() {
  DataTable dt = new DataTable();
  dt.Columns.Add("Col0", typeof(string));
  dt.Columns.Add("TargetColumn", typeof(int));
  dt.Columns.Add("Col2", typeof(string));
  Random rand = new Random();
  for (int i = 0; i < 30; i++) {
    dt.Rows.Add("COR" + i, rand.Next(0, 7), "C2R" + i);
  }
  return dt;
}
DataTable GridDT;
bool ColorOn = true;
System.Windows.Forms.Timer FiveSecondTimer = new System.Windows.Forms.Timer();
System.Windows.Forms.Timer MilliSecondTimer = new System.Windows.Forms.Timer();

private void Form1_Load(object sender, EventArgs e) {
  GridDT = GetDT();
  dg.DataSource = GridDT;
  StartTimers();
}
private void dg_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
  if (dg.Columns[e.ColumnIndex].Name == "TargetColumn") {
    if (dg.Rows[e.RowIndex].Cells["TargetColumn"].Value != null) {
      SetRowColor(dg.Rows[e.RowIndex], false);
    }
  }
}