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

时间:2013-11-30 09:15:07

标签: c# forms timer intervals

我正在尝试用c#格式创建聊天,我创建了两个定时器;其中一个是每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();

1 个答案:

答案 0 :(得分:0)

来自您的评论:

您需要将1000的{​​{1}}设置为1 sec毫秒。 因为默认情况下1 sec = 1000Interval

100

解决方案2 :除非您致电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(); } ,否则无需致电Start()

请删除调用Stop()

控制器计时器

Start()

发送状态:

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