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


Автор: andDavid 18.1.2011, 15:06
Из некоторой формы вызывается метод SetConnection, который соединятся с сервером и , если ответ пришел верный (не "FAIL"), то нужно отобразить форму Display. А она не отображается (((

Код

        public void SetConnection(Form form)
        {
            currentForm = form;
            try
            {
                client = new TcpClient();
                client.Connect("localhost", 5000);

                output = client.GetStream();

                writer = new BinaryWriter(output);
                reader = new BinaryReader(output);
               
 
                byte[] bt = SerializationHelp.ConvertPersonToByteArray(reqData);
                writer.Write(bt.Length);
                writer.Write(bt);

                int bytesSize = reader.ReadInt32();
                reqData = SerializationHelp.ConvertByteArrayToPerson(reader.ReadBytes(bytesSize));

                if (reqData.SendMessage == "FAIL" && reqData.DoInsert)
                {
                    MessageBox.Show("Such login or password exist");
                    return;
                }
                else if (reqData.SendMessage == "FAIL" && !reqData.DoInsert)
                {
                    MessageBox.Show("Incorrect login or password");
                    return;
                }

/**********************
*  окно отображается, но остается белым. 
*  Как избавиться?
*  Проблема в цикле. Если его удаляю, то все работает. 
*   НО мне надо поддерживать соединение.
*
***********************/
                currentForm.Close();
                Display display = new Display();
                display.Show();                                                                
                        
                while (client.Connected) 
                {
                  ResieveMessage();
                }
        
            }
            catch (Exception error)
            {
                MessageBox.Show(error.ToString());
            }
            finally
            {
                if (client.Connected)
                {
                    writer.Close();
                    output.Close();
                    client.Close();
                }
            }
        }

        private void ResieveMessage()
        {
            int bytesSize = reader.ReadInt32();
            reqData = SerializationHelp.ConvertByteArrayToPerson(reader.ReadBytes(bytesSize));
        }

Автор: freem4n 18.1.2011, 20:35
Насколько я понял твой код то сначала закрываешь текущую форму а потом пытаешься отобразить новую, но это никогда не получится т.к. код за методом Close() просто не выполнится.

Автор: andDavid 18.1.2011, 20:43
Все, сделал. Немного изменил структуру проекта. А вообще надо было создать новый поток, который бы отвечал за прием сообщений. А другой поток - за  форму Display. 
В данном коде создать новый поток мне не удается, так как форма, из которой я вызываю метод  SetConnection, должна быть закрыта только тем потоком, в котором она была создана.

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