Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Клиент Серверное приложение


Автор: Impostr 18.10.2012, 15:57
Пишу клиент-серверное приложение
код сервера
Код
try
            {
                byte[] data = new byte[Received.Length * 8192]; //массив байт для передачи сообщения
                server.Start();
                int sec = Convert.ToInt32(DateTime.Now.Second.ToString());
                int sec1 = Convert.ToInt32(DateTime.Now.Second.ToString());

                while ((sec1 - sec) < 2)
                {
                    if (!server.Pending())
                    {
                        //scanner = false;
                    }
                    else
                    {
                        TcpClient client = new TcpClient();
                        client = server.AcceptTcpClient();
                        //получение информации от клиента
                        NetworkStream stream = client.GetStream();
                        int i;
                        //_________________________________ПОЛУЧЕНИЕ И ОТПРАВКА ДАННЫХ______________
                        //принимаем данные от клиента пока не дойдем до конца.
                        data = new Byte[8192]; // масив для хранения принятых данных
                        String responseData = String.Empty;
                        Int32 bytes = stream.Read(data, 0, data.Length); // получение данных в bytes
                        responseData = System.Text.Encoding.Unicode.GetString(data, 0, bytes); // перевод в строку
                        // разбиение строки на массив строк

                        String[] Received_line = responseData.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
                        for (int j = 0; j < Received_line.Length; j++)
                        {
                            Received[j] = Convert.ToString(Received_line[j]);
                        }
                        DataRow New_Applications = database1DataSet.Aapplication_File.NewRow();
                        //описываем созданую строку по параметрам которые созданы в таблице
                        New_Applications["Заказщик"] = Received[1];
                        New_Applications["Дата"] = Received[0];
                        New_Applications["Предприятие"] = Received[2];
                        New_Applications["СутьЗаявки"] = Received[3];
                        New_Applications["Пример"] = Received[4];
                        //записать строку
                        database1DataSet.Aapplication_File.Rows.Add(New_Applications);
                        aapplication_FileTableAdapter.Update(database1DataSet.Aapplication_File);
                        label6.Text = "Заявка добавленна!";
                    }
                    sec1 = Convert.ToInt32(DateTime.Now.Second.ToString());
                }
                server.Stop();
                //получили данные в масиве, разделяем его по переменных
                label1.Text = "";
                
            }
            catch
            {
                ;
            }
        }


Проблема в том, что при таком решении приложение наглухо зависает, если параллельно ему открыть еще что то, если же убрать строчку
Код
while ((sec1 - sec) < 2)

тогда приложение будет всегда находиться в "подвисшем" состоянии, пока не начнет получать данные, подскажите как избавиться от этих зависаний

Автор: Экскалупатор 18.10.2012, 18:13
запусти ожидание в отдельном потоке. и вызывай из него остальную часть приложения по необходимости.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)