Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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# 在WinC窗体中发生其他进程时,计时器1挂起_C#_Winforms_Timer - Fatal编程技术网

C# 在WinC窗体中发生其他进程时,计时器1挂起

C# 在WinC窗体中发生其他进程时,计时器1挂起,c#,winforms,timer,C#,Winforms,Timer,我正在使用间隔为1毫秒的计时器1在文本框中生成时间hr、min、secs、毫秒 现在,每当我连续收到值时。我必须串行写入数据,这将使3个led亮起,每个led之间的延迟为1秒。我使用一个文本框来显示文本,如输出1打开和输出2随时间打开。这样我就可以知道他们什么时候开机了 但问题是,当led亮起时,计时器会挂起,因此无法显示led亮起的确切时间 我的应用程序需要显示每个led亮起的时间 代码:定时器 private void timer1_Tick(object sender, EventArgs

我正在使用间隔为1毫秒的计时器1在文本框中生成时间hr、min、secs、毫秒

现在,每当我连续收到值时。我必须串行写入数据,这将使3个led亮起,每个led之间的延迟为1秒。我使用一个文本框来显示文本,如输出1打开和输出2随时间打开。这样我就可以知道他们什么时候开机了

但问题是,当led亮起时,计时器会挂起,因此无法显示led亮起的确切时间

我的应用程序需要显示每个led亮起的时间

代码:定时器

private void timer1_Tick(object sender, EventArgs e) 
{
 dateTime = DateTime.Now;
 time = dateTime.Hour + ":" + dateTime.Minute + ":" + dateTime.Second + ":" + dateTime.Millisecond;
 date = Convert.ToString(dateTime.Day + "/" + dateTime.Month + "/" + dateTime.Year);
 textBox2.Text = time;
 textBox1.Text = date;
}
代码:串行发送/接收

String data = serialPort1.ReadLine();
if (data == "11")
{
   textBox4.AppendText(time + " Input 1 HIGH\n");
   textBox4.AppendText("\n");
   button11.BackColor = Color.Yellow;

    Thread.Sleep(1000);
    serialPort1.WriteLine("1");
    textBox4.AppendText(time + " Output 1 HIGH\n");

     Thread.Sleep(1000);
     serialPort1.WriteLine("2");
     textBox4.AppendText(time + " Output 2 HIGH\n");

      Thread.Sleep(1000);
      serialPort1.WriteLine("3");
      textBox4.AppendText(time + " Output 2 HIGH\n");
  }
我是winforms的新手,所以我不知道。但我已经准备好学习了。
我可以使用什么使我的计时器在led灯打开时不会挂起?您应该在单独的线程中执行串行发送/接收代码。当前,您的整个应用程序在一个线程中运行,所以当您调用thread.Sleep时,您的整个应用程序将挂起,因为每个控件都在等待thread.Sleep结束

Concider为您的应用程序使用某种多线程方法。 例如,您可以查看BackgroundWorker类的简单实现:

如何创建计时器?你用的是什么定时器?我用的是设计定时器,我从Toolbox拖放它。你是如何执行第二段代码的?你到底在使用线程吗?是的,对接收到的数据使用SerialDataReceiveDeventhadler,但对传输没有任何作用我想到了后台工作程序,但如何将其用于计时器。Backgroundworker应该用于串行传输/接收代码,而不是计时器。