Задать вопрос
YaKotikTvoy
@YaKotikTvoy
Стьюдик

Как исправить ошибку, возникшую с фоновым потоком?

public VlazhnostForm()
        {
            InitializeComponent();

            server = new IPEndPoint(Dns.GetHostAddresses(Dns.GetHostName())[Dns.GetHostAddresses(Dns.GetHostName()).Length - 1], port);

            socketServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            socketServer.Bind(server);

            socketServer.Listen(10);

            VlazhnostTimerTread = new Thread(HumidityReception);

            VlazhnostTimerTread.IsBackground = true;

            VlazhnostTimerTread.Start();

        }

        /// <summary>
        /// Принимает на постоянной основе данные 
        /// </summary>

        private void HumidityReception()
        {
            while (true)
            {
                Socket socketWithData = socketServer.Accept();

                if (socketWithData.Available > 0)
                {
                    byte[] buffer = new byte[256];

                    string data;

                    do
                    {
                        byte size = (byte)socketWithData.Receive(buffer);

                        data = Encoding.UTF8.GetString(buffer, 0, size);

                    } while (socketWithData.Available > 0);

                    ReceiveList.Items.Add(new ListViewItem(data));//System.InvalidOperationException: "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'ReceiveList' не из того потока, в котором он был создан."


                    ReceiveList.Refresh();
                }
                Thread.Sleep(2000);
            }

        }
  • Вопрос задан
  • 36 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
К UI-элементам надо обращаться в том же потоке, где они были созданы, в ошибке же написано.
Можно использовать Invoke, но лучше конечно сделать нормальную передачу данных обратно из потока обработки.
Ответ написан
Комментировать
Обращаться к элементам UI можно только из одного потока - того, в котором они созданы

Починить можно так:
https://docs.microsoft.com/en-us/dotnet/desktop/wi...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы