У меня есть программа, которая должна подключиться к серверу для сбора некоторых данных. Я запускаю новый поток и выполняю последовательность соединений. В этой последовательности он будет продолжать пытаться подключиться до тех пор, пока не сделает это успешно.
Код для последовательности подключения следующий:
// Code for InitializeConnection
// Our address to our Authentication Server
IPEndPoint authenServerEP = new IPEndPoint(IPAddress.Parse("192.168.1.100"), 8007);
// Connect to the Authentication server
while (!this.connected)
{
try
{
this.sock.Connect(authenServerEP);
this.connected = true;
}
catch (SocketException retryConnectException)
{
if (false == retried)
{
retried = true;
}
}
}
После того, как я запускаю поток, в родительском / основном потоке я продолжаю цикл и проверяю переменную, объявленную в моей основной форме / диалоге, на предмет того, подключен он или нет.
Код для основного потока выглядит следующим образом:
// Connect to the Authentication Server
new Thread(InitializeConnection).Start();
// Loop till connected
while (!this.connected)
{
if ((true == this.retried) && (false == this.establishingConnectionForm.Visible))
{
this.establishingConnectionForm.Show();
}
}
this.establishingConnectionForm.Dispose();
Если в коде InitilizeConnection он повторяет попытку подключения, потому что не удалось в первый раз, я хотел бы, чтобы он показал новое диалоговое окно / форму, которая позволяет пользователю узнать, что он пытается подключиться. Когда я использую метод .Show () при установленииConnectionForm (в родительском потоке), он вызывает диалог / форму, но не отображается должным образом. Некоторые из инструментов в форме затенены белым, а значок мыши превращается в значок мышления / выполнения работы и не позволяет нажимать на форму и взаимодействовать с ней.
То, что я себе представлял, - это то, что я смогу показать форму и взаимодействовать с ней (т.е. закройте ее, пометив ее буквой «X» в верхнем правом углу), переместить ее и прочее. Когда соединение было установлено, я выходил из цикла while (! This.connected) в основном / родительском потоке, а затем закрывал / удалял установлениеConnectionForm.
Я попытался создать / инициализировать форму в потоке, который выполняет последовательность соединений, но я все еще получаю тот же результат с инструментами в форме, которые затемнены и не могут взаимодействовать с ней. Использование метода .ShowDialog () обеспечивает правильное отображение и позволяет мне взаимодействовать с ним, но я не хочу блокировать, так как у меня нет DialogResult. Я хочу, чтобы форма закрывалась сама собой после установления соединения.
Я ценю, что вы читаете мою ветку и любые ваши комментарии. : D