Здравствуйте!
Есть клиент и сервер, и при попытке клиетна подключиться к серверу в коде сервера вылазит исключение:
Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'txtInfo' не из того потока, в котором он был создан.
Что с этим можно сделать?
Вот код сервера:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Threading.Tasks;
using System.Windows.Forms;
using SimpleTcp;
namespace Server
{
public partial class Server : Form
{
public Server()
{
InitializeComponent();
}
SimpleTcpServer server;
private void btnStart_Click(object sender, EventArgs e)
{
server.Start();
txtInfo.Text += $"Сервер запущен.{Environment.NewLine}";
btnStart.Enabled = false;
btnStop.Enabled = true;
}
private void Form1_Load(object sender, EventArgs e)
{
server = new SimpleTcpServer(txtIP.Text);
server.Events.ClientConnected += Events_ClientConnected;
server.Events.ClientDisconnected += Events_ClientDisconnected;
server.Events.DataReceived += Events_DataReceived;
btnStop.Enabled = false;
}
private void Events_DataReceived(object sender, DataReceivedEventArgs e)
{
txtInfo.Text += $"{e.IpPort}: {Encoding.UTF8.GetString(e.Data)}{Environment.NewLine}";
}
private void Events_ClientConnected(object sender, ClientConnectedEventArgs e)
{
txtInfo.Text += $"{e.IpPort} подключился.{Environment.NewLine}";
}
private void Events_ClientDisconnected(object sender, ClientDisconnectedEventArgs e)
{
txtInfo.Text += $"{e.IpPort} отключился.{Environment.NewLine}";
}
private void btnStop_Click(object sender, EventArgs e)
{
if (server.IsListening)
server.Stop();
txtInfo.Text += $"Сервер остановлен.{Environment.NewLine}";
btnStart.Enabled = true;
btnStop.Enabled = false;
}
}
}
И на этой строчке вылазит исключение:
txtInfo.Text += $"{e.IpPort} подключился.{Environment.NewLine}";
txtInfo - это прямоугольник с scrollbar'ом, если что