Проблема запуска таймера из асинхронного сокета сервера - PullRequest
0 голосов
/ 25 июля 2011

У меня есть клиент-серверное приложение, которое использует асинхронный сокет. Моя проблема в том, что я не могу запустить таймер на стороне клиента со стороны сервера. У меня есть метод отправки данных клиенту со стороны сервера, и у клиента есть метод дляобработать эти данные и запустить таймер. Нет проблем при получении данных и их обработке. Но управление таймером не работает. У меня есть кнопка на стороне клиента, которая запускает таймер с тем же кодом. Так что он работаетс кнопкой на стороне клиента, но не работающей, если эта команда приходит с сервера. В чем проблема ??

Вот мои коды;

 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 голосов
/ 25 июля 2011

Если таймер - Windows.Forms.Timer, вам нужно вызвать Control.Invoke, чтобы упорядочить вызов, который устанавливает свойства таймера и запускает таймер обратно в потоке пользовательского интерфейса.

Вы также должны сделать это для всех ваших текстовых полей и других элементов пользовательского интерфейса. Я подозреваю, что это ваша проблема, поскольку общение через сокеты обычно происходит в потоке ThreadPool, а не в основном потоке (UI).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...