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

时间:2011-07-25 16:44:26

标签: c# sockets asynchronous network-programming

我有一个使用异步套接字的客户端/服务器应用程序。我的问题是无法从服务器端启动客户端的定时器控制。我有一个从服务器端向客户端发送数据的方法,客户端得到了一个方法处理这些数据并启动计时器。获取数据并处理它没有问题。但计时器控制不起作用。我在客户端有一个按钮,启动计时器的代码相同。所以它如果此命令来自server.Whats问题??

,在客户端使用按钮但不工作

这是我的代码;

 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();


    }

1 个答案:

答案 0 :(得分:0)

如果计时器是Windows.Forms.Timer,则需要调用Control.Invoke来编组设置计时器属性的调用,并在UI线程上重新启动计时器。

您还应该对所有文本框和其他UI元素执行此操作。我怀疑这是你的问题,因为套接字通信通常发生在ThreadPool线程而不是主(UI)线程上。