Member 13714031 Ответов: 0

Пользовательский интерфейс зависает при отправке изображения по протоколу 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 (). Теперь приложение работает нормально.Спасибо за помощь

0 Ответов