异步服务器套接字的启动计时器问题

本文关键字:计时器 问题 启动 服务器 套接字 异步 | 更新日期: 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)线程上。