Пользовательский интерфейс зависает при отправке изображения по протоколу TCP
Я пишу этот код, чтобы отправить скриншот нескольким подключенным клиентам.Отлично работает на стороне клиентов, но замораживает пользовательский интерфейс приложения на стороне сервера.Я не понимаю, в чем причина этой проблемы.
public void LoopClients() { while (_isRunning) { TcpClient newClient = Server.AcceptTcpClient(); Thread t = new Thread(new ParameterizedThreadStart(HandleClient)); t.Start(newClient); } } public void HandleClient(object obj) { TcpClient client = (TcpClient)obj; BinaryFormatter binaryformatter = new BinaryFormatter(); while (client.Connected) { MainStream = client.GetStream(); binaryformatter.Serialize(MainStream, GrabDesktop()); } } private static Image GrabDesktop() { System.Drawing.Rectangle bound = Screen.PrimaryScreen.Bounds; Bitmap screenshot = new Bitmap(bound.Width, bound.Height, PixelFormat.Format32bppArgb); Graphics graphics = Graphics.FromImage(screenshot); graphics.CopyFromScreen(bound.X, bound.Y, 0, 0, bound.Size, CopyPixelOperation.SourceCopy); return screenshot; }
Я вызываю функцию loopClient() в timer и than timer in button для запуска программы.
Любое предложение улучшить код или исправить t решить проблему было бы большим подспорьем.
Что я уже пробовал:
Я искал много решений, но отмечая, что это не помогает в любом случае.
F-ES Sitecore
Если он замораживает пользовательский интерфейс, то запустите код в своем собственном потоке, используя BackgroundWorker или класс Thread, или какой-то другой способ сделать это. Google "winforms run code on new thread", и я уверен, что вы найдете множество примеров.
Member 13714031
Я создаю новый поток для запуска в функции loopclient (). Теперь приложение работает нормально.Спасибо за помощь