【问题标题】:Starting Timer problem from Asynchronous Server Socket从异步服务器套接字启动定时器问题
【发布时间】:2017-05-08 10:29:52
【问题描述】:

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

这是我的代码;

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


    }

【问题讨论】:

    标签: c# sockets asynchronous network-programming


    【解决方案1】:

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

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

    【讨论】:

    • 但是我可以控制客户端的每个窗体控件,除了 Timer 对象。所以其他控件没有问题。你能给我举个例子吗?
    • @Ibrahim:你是否设置了断点以确保你真正进入了那个电话?
    • 是的。它的进程代码,但它没有进入 Timer Tick 事件。
    • @Ibrahim:尝试将其更改为:this.Invoke(new Action( () =&gt; { timer.Enabled = true; timer.Start(); }));
    • 我使用的是 .NET Framework 2.0,所以 lambda 不起作用。有 .NET 2.0 方式吗?
    猜你喜欢
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2017-08-13
    相关资源
    最近更新 更多