两个不同间隔的定时器C#Form

我正在尝试用c#forms创建一个聊天,我创建了两个定时器; 其中一个是每1秒检查一次,如果有人写了什么,另一个是每1秒发送一条消息“我在线”或“我离线”取决于我设置的内容; 问题是,即使我做了一个不再显示垃圾邮件的if,我也发送了太多垃圾邮件; 但问题是,即使我没有看到消息,聊天也是滞后的,我的意思是更多的时间我让它打开更多滞后它…例如,如果我从另一个控制台写一条消息,我会在30秒后看到它如果让它打开,时间会增加。 所以我试着改变发送“ON”或“OFF”的定时器的间隔为1分钟,但是当我尝试启动程序它崩溃时,它只有在定时器具有相同的间隔并且我不明白时才有效为什么,我正在寻找解决方案……

我的问题是我想要不同的时间间隔,当我做程序崩溃时,它会冻结……它不会在任何时候工作。

– >我想让检查计时器默认为100毫秒,并将状态发送器计时器设置为60000(1分钟); 但如果我这样做,程序会冻结; 它不会给我一个错误,但我不能再做任何事了。

计时器初始化:

private void Form1_Load(object sender, EventArgs e) { ControlTimerInbox.Enabled = true; ControlTimerInbox.Start(); StatusTimer.Enabled = true; StatusTimer.Start(); } 

这个用于控制定时器:

 private void ControlTimerInbox_Tick(object sender, EventArgs e) { mesric = Encoding.ASCII.GetString(receive.Receive(ref ipremoto)); if (mesric.Contains("OFF!")==true) { if (mesric.Contains("GruppoUno") == true) { GruppoUnoStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statusoff.jpg"); GruppoUnoLblStatus.ForeColor = Color.Red; } else if (mesric.Contains("GruppoDue") == true) { GruppoDueStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statusoff.jpg"); GruppoDueLblStatus.ForeColor = Color.Red; } else if (mesric.Contains("GruppoTre") == true) { GruppoTreStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statusoff.jpg"); GruppoTreLblStatus.ForeColor = Color.Red; } else if (mesric.Contains("GruppoQuattro") == true) { GruppoQuattroStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statusoff.jpg"); GruppoQuattroLblStatus.ForeColor = Color.Red; } else if (mesric.Contains("GruppoCinque") == true) { GruppoCinqueStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statusoff.jpg"); GruppoCinqueLblStatus.ForeColor = Color.Red; } } else if (mesric.Contains("ON!")==true) { if (mesric.Contains("GruppoUno") == true) { GruppoUnoStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statuson.jpg"); GruppoUnoLblStatus.ForeColor = Color.Green; } else if (mesric.Contains("GruppoDue") == true) { GruppoDueStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statuson.jpg"); GruppoDueLblStatus.ForeColor = Color.Green; } else if (mesric.Contains("GruppoTre") == true) { GruppoTreStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statuson.jpg"); GruppoTreLblStatus.ForeColor = Color.Green; } else if (mesric.Contains("GruppoQuattro") == true) { GruppoQuattroStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statuson.jpg"); GruppoQuattroLblStatus.ForeColor = Color.Green; } else if (mesric.Contains("GruppoCinque") == true) { GruppoCinqueStatusPicture.BackgroundImage = Image.FromFile(@".\tvchat\statuson.jpg"); GruppoCinqueLblStatus.ForeColor = Color.Green; } } else { nome = Dns.GetHostByAddress(ipremoto.Address); CampoChat.Text += "(" + DateTime.Now + ")" + mesric + "\n"; ControlTimerInbox.Enabled = true; ControlTimerInbox.Start(); } 

这一个是用于发送状态:

 private void StatusTimer_Tick(object sender, EventArgs e) { if (status == true) { mes = "GruppoDue:ON!"; send.Send(Encoding.ASCII.GetBytes(mes), mes.Length, "192.168.7.255", 11000); } else { mes = "GruppoDue:OFF!"; send.Send(Encoding.ASCII.GetBytes(mes), mes.Length, "192.168.7.255", 11000); } StatusTimer.Start(); 

来自你的评论:

你需要设置1000 1 sec1 sec = 1000毫秒。 因为默认情况下Interval100

 private void Form1_Load(object sender, EventArgs e) { ControlTimerInbox.Interval=1000;//for 1 second ControlTimerInbox.Enabled = true; ControlTimerInbox.Start(); StatusTimer.Interval=1000;//for 1 second StatusTimer.Enabled = true; StatusTimer.Start(); } 

解决方案2:除非调用Stop()否则不需要调用Start() Stop()

所以删除调用Start()

控制器计时器

  else { nome = Dns.GetHostByAddress(ipremoto.Address); CampoChat.Text += "(" + DateTime.Now + ")" + mesric + "\n"; ControlTimerInbox.Enabled = true; //ControlTimerInbox.Start(); //remove or comment } 

发送状态:

 private void StatusTimer_Tick(object sender, EventArgs e) { if (status == true) { mes = "GruppoDue:ON!"; send.Send(Encoding.ASCII.GetBytes(mes), mes.Length, "192.168.7.255", 11000); } else { mes = "GruppoDue:OFF!"; send.Send(Encoding.ASCII.GetBytes(mes), mes.Length, "192.168.7.255", 11000); } //StatusTimer.Start();//remove or comment