У меня проблема при попытке добавить данные в список из моей основной формы, я пытаюсь добавить данные в этот список из нового класса в моем проекте, мне нужен этот новый класс, чтобы иметь возможность добавлять данные вмой список без ошибок, я пытаюсь использовать invoke и получаю следующую ошибку (System.InvalidOperationException: «Invoke или BeginInvoke не могут быть вызваны для элемента управления, пока не создан дескриптор окна».) Я видел эту ошибку вдругие вопросы по переполнению стека, но похожие на мою проблему, я буду добавлять оба класса своего кода здесь, один - основной класс, а другой - второй класс, который я создал, который должен будет добавить данные в список.данные поступают из telnet tcp / ip и порта 23, что соединение работает нормально, проблема заключается в добавлении этих данных в мой список.
Основной класс вызывает функции из моего другого класса
namespace BarcodeReceivingApp {
//TelnetConnection stopConnection = new TelnetConnection();
public partial class BarcodeReceivingForm : Form
{
//GLOBAL VARIABLES
const string Hostname = "myip";
private const int Port = 23;
public BarcodeReceivingForm()
{
InitializeComponent();
}
private void btn_ConnectT_Click(object sender, EventArgs e)
{
var readData = new TelnetConnection(Hostname, Port);
readData.ServerSocket(Hostname, Port);
}
private void btn_StopConnection_Click(object sender, EventArgs e)
{
//var connection = new TelnetConnection(Hostname, Port);
// connection.CloseConnection();
}
}
}
класс, который изменит данные моего списка из основного класса.
namespace BarcodeReceivingApp
{открытый класс TelnetConnection {public BarcodeReceivingForm BcForm= new BarcodeReceivingForm ();
private Thread _readWriteThread;
private TcpClient _client;
private NetworkStream _networkStream;
private string _hostname;
private int _port;
public TelnetConnection(string hostname, int port)
{
this._hostname = hostname;
this._port = port;
}
public void ServerSocket(string ip, int port)
{
try
{
_client = new TcpClient(ip, port);
}
catch (SocketException)
{
MessageBox.Show(@"Failed to connect to server");
return;
}
//Assign networkstream
_networkStream = _client.GetStream();
//start socket read/write thread
_readWriteThread = new Thread(ReadWrite);
_readWriteThread.Start();
}
public void ReadWrite()
{
//Set up connection loop
while (true)
{
var command = "test";
if (command == "STOP1")
break;
//write(command);
var received = Read();
BcForm.lst_BarcodeScan.Invoke(new Action (() => BcForm.lst_BarcodeScan.Items.Add(received)));
}
}
public string Read()
{
byte[] data = new byte[1024];
var received = "";
var size = _networkStream.Read(data, 0, data.Length);
received = Encoding.ASCII.GetString(data, 0, size);
return received;
}
public void CloseConnection()
{
_networkStream.Close();
_client.Close();
}
}
}
окончательный результат, как я уже сказал, - это мой метод ReadWrite, при запуске цикла я добавлю данные в мой список из моего основного класса формы
здесь изображениегде я получаю ошибку Изображение ошибки