异步服务器套接字的启动计时器问题
本文关键字:计时器 问题 启动 服务器 套接字 异步 | 更新日期: 2023-09-27 18:03:20
我有一个使用异步套接字的客户端/服务器应用程序。我的问题是我不能从服务器端开始定时器控制客户端。我有一个从服务器端发送数据到客户端的方法,客户端得到了处理这些数据的方法,并开始定时器。获取数据和处理数据没有问题。但是定时器控制不起作用。我有一个按钮在客户端启动定时器与相同的代码。所以它的工作与一个按钮在客户端,但不工作,如果这个命令来自服务器。有什么问题吗?
这是我的代码;
void MessageSend(string msj)
{
foreach (Client _client in connectedCompList)
{
//for sending data from server side to client side
_client.clientSoket.Send(ConvertByteArray(msj));
}
}
private void btnStartExam_Click(object sender, EventArgs e)
{
MessageSend("/t/" + "," + txtMinute.Text + "," + txtSecond.Text+",");
}
void MessageControl(string message)
{
if (message.Length < 1)
return;
switch (message.Substring(0, 3))
{
case "/e/":
txtAdayNo.Text = "";
txtVeri.Text = "";
txtAdSoyad.Text = "";
txtSinav.Text = "";
break;
case "/t/":
// starting exam after separate min and sec.
string[] time = message.Split(',');
minute = Convert.ToInt32(time[1]);
second = Convert.ToInt32(time[2]);
timer.Enabled = true;
timer.Start();
break;
default:
break;
}
private void btnTest_Click(object sender, EventArgs e)
{
// working with this event.
timer.Enabled = true;
timer.Start();
}
如果计时器是Windows.Forms.Timer
,你需要调用Control.Invoke
来封送设置计时器属性的调用,并在UI线程上启动计时器。
你也应该为你所有的文本框和其他UI元素这样做。我怀疑这是你的问题,因为套接字通信通常发生在ThreadPool线程上,而不是主(UI)线程上。