我正在尝试用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();
答案 0 :(得分:0)
来自您的评论:
您需要将1000
的{{1}}设置为1 sec
毫秒。
因为默认情况下1 sec = 1000
为Interval
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
}