2013-11-30 2 views
-1

Я пытаюсь создать чат в форме C#, и я создал два таймера; один из них проверяет каждую секунду, если кто-то что-то написал, другой отправляет каждые 1 секунду сообщение «Я в сети» или «Я в сети» зависит от того, что я установил; проблема в том, что я слишком много рассылаю спам, даже если я сделал, если больше не отображается спам-сообщения; но проблема в том, что даже если я не вижу сообщений, чат отстает, я имею в виду больше времени, я позволяю ему открывать больше лаг, чем это делает. Например, если я пишу сообщение с другой консоли, я вижу его через 30 секунд , и время увеличивается, если оно открывается. Итак, я попытался изменить интервал таймера, который посылает «ON» или «OFF» на 1 минуту, но когда я пытаюсь запустить программу, он сработает, он работает, только если таймеры имеют одинаковые интервалы, и я не понять, почему я ищу решение ...Два таймера с двумя разными интервалами C# Форма

МОЙ ПРОБЛЕМ ЯВЛЯЕТСЯ, ЧТО Я ХОЧУ ПРИМЕНЯТЬ РАЗЛИЧНЫЕ ВРЕМЕННЫЕ ИНТЕРВАЛЫ, И КОГДА Я ДЕЛАЮ, ЧТО ПРОГРАММА РАСПРОСТРАНЯЕТ, ЭТО ЗАМОРАЖИВАНИЕ .. ЭТО НЕ РАБОТАЕТ ЛЮБОЙ.

-> Я хочу установить таймер проверки по умолчанию на 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(); 
+0

, если вы можете разместить код, это поможет нам решить эту проблему. –

+0

Там вы идете ... –

+0

, пожалуйста, добавьте часть, в которой вы создаете экземпляр и инициализируете таймеры, и где вы добавляете к ним события. – Ingo

ответ

0

из ваших комментариев:

вы n eed для установки 1000 для 1 sec как 1 sec = 1000 миллисекунд. потому что по умолчанию Interval является 100

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: Вам не нужно, чтобы позвонить 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 
+0

Я знаю это! Но я хочу установить один таймер на 1 секунду, а другой - на 1 минуту! И если я это сделаю, он разбил программу, ничего не работает. Потому что, если я разрешаю таймеру STATUS SENDER на 1 секунду, IT LAGGS //, потому что я отправляю «Я ОНЛАЙН» каждую секунду, поэтому через какое-то время он начинает задерживаться, поэтому мне нужно изменить ТАЙМЕР STATUS SENDER, чтобы отправить «I 'm ONLINE "каждую минуту, чтобы он больше не отставал // ПРОГРАММА, поэтому я получаю сообщения через 30 секунд и более. –

+0

@CorneliuCotet: Я думаю, вам нужно остановить таймер. –

+0

Хм .. но если я остановлю таймер, как я отправлю «Я в сети»?Поскольку я сделал что-то вроде чата Facebook, у меня есть список справа, который показывает мне, кто включен или выключен, поэтому чтобы показать другим, что я «ВКЛЮЧЕН» или «ВЫКЛ», мне нужно создайте таймер, который отправляется каждую минуту или около того, что я в сети, так что он список, я буду в сети. –

Смежные вопросы