У меня проблема с тем, что я хочу иметь возможность изменять текстовое поле из другого класса.
Я пробовал искать и тестировать решения, но ни одно из них не помогло. (Вызов для примера ..)
Код из класса cThread:
class cThread
{
public bool closed = false;
private TcpClient client;
private StreamReader ins;
private StreamWriter ots;
Form1 meow = new Form1();
public cThread(TcpClient client, StreamReader ins, StreamWriter ots)
{
this.client = client;
this.ins = ins;
this.ots = ots;
}
public void run()
{
try
{
string responseLine;
responseLine = meow.bunifuCustomTextbox2.Text;
while ((responseLine = ins.ReadLine()) != null)
{
Console.WriteLine(responseLine);
meow.bunifuCustomTextbox3.Text = responseLine + " test";
if (responseLine.IndexOf("*** Adios") != -1)
{
break;
}
}
closed = true;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
Environment.Exit(0);
}
}
Это приводит к ошибке: Cross-Thread operation not valid: accessed from a thread other than the thread it was created on.
Я также пробовал это решение:
public void run()
{
try
{
string responseLine;
meow.bunifuCustomTextbox2.Invoke(new MethodInvoker(delegate { responseLine = meow.bunifuCustomTextbox2.Text; }));
while ((responseLine = ins.ReadLine()) != null)
{
Console.WriteLine(responseLine);
meow.bunifuCustomTextbox3.Invoke(new MethodInvoker(delegate { meow.bunifuCustomTextbox3.Text = meow.bunifuCustomTextbox2.Text; }));
meow.bunifuCustomTextbox3.Text = responseLine + " test";
if (responseLine.IndexOf("*** Adios") != -1)
{
break;
}
}
closed = true;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
Environment.Exit(0);
}
}
Это тоже не сработало. Та же ошибка.
Я ожидаю, что когда пользователь введет сообщение в bunifuCustomTextbox2, оно будет установлено на responseLine, которое я хочу оживленно обновить с помощью bunifuCustomTextbox3.
Поскольку это будет многопользовательский чат, и я конвертирую этот код из консольного приложения в winforms ..
извините, если я тупой: (* 1020 *