Клиент TCP C# — Выполнение передачи на всех формах без прерывания?
Всем доброго времени суток, у меня есть сервер на tcp и клиент с несколькими WinForm. Что можно сделать, чтобы на 1 форме вызвать Connect, а на следующих уже только передавать значения для отправки.
1. Форма 1 - Connect
2. Отправка/приём массива byte (Форма 1)
3. Переход на Форму 2
4. Отправка/приём массива byte(Форма 2)
5. Переход на Форму 3
6. Отправка/приём массива byte(Форма 2)
В итоге необходим 1 Connect на 1 форме, а далее только принимать и передавать данные. Прерывания связи между клиентом и сервером при переходе между формами не допустим.
Мои действия:
1. Thread, Task - могут вызываться только 1 форме, при переходе на другую форму поток завершается (примерно не получилось с ним)
2. ООП - создал отдельный класс для подключений, connect, приема и т.д. вызываю на форме 1 connect и передачу массива, далее перехожу на форму начинаю передавать массив byte и ошибка требует connect т.е. соединение было прервано.
//Server.cs
public void Connect()
{
sListen.Connect();
}
public void Rec(byte[] n)
{
sListen.Recive(n);
}
public void Send(byte[] n)
{
sListen.Send(n);
}
//Form1
byte[] n = new byte[10];
Server sr = new Server();
sr.Connect();
sr.Rec(n);
sr.Send(n);
//Form2
byte[] n = new byte[10];
Server sr = new Server();
sr.Send(n);
sr.Rec(n);
Joker456: Вот класс Server и передаете в конструктор.
public Form(Server server)
{
this.server = server;
}
// Затем используете
public void OnClickButton()
{
byte[] n = new byte[10];
this.server.Send(n);
this.server.Rec(n);
}
Если операция долгая и не хочится блокировать отрисовку, то выносите в поток. Только учтите, что у вас один канал и данные нужно отсылать последовательно, поэтому придется придумать механизмы синхронизации и передачи результатов обратно в UI поток. Тут могут помочь механизмы
synchronizationcontext/Dispatch и колбеки.
Петр: успешно, не думал что если буду передавать сам параметр server, то connect не разъединится, а тут прям всё ок.
На данный момент без каких либо synchronizationcontext и т.д. только ООП все ок.