Как редактировать элементы управления Windows Forms из разных потоков - PullRequest
1 голос
/ 13 декабря 2010

Я пытаюсь сделать AC # IRC клиентом.Моя проблема: у меня есть TextBox, объявленный в классе Form, и у меня есть таймер, который выполняет метод OnTimedEvent, который должен редактировать TextBox.

System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 500;
aTimer.Enabled = true;


public void OnTimedEvent(object source, ElapsedEventArgs e)
{
    string inputLine = reader.ReadLine();
    tab1text.Text = inputLine;
}

Я получаю ошибку, чтообъект, который я хочу отредактировать, был создан другим потоком ..

Читатель - это StreamReader, который получает данные из TCP-соединения.

Ответы [ 3 ]

4 голосов
/ 13 декабря 2010
tab1text.Invoke(new Action(delegate(){ tab1text.Text = inputLine }));
1 голос
/ 29 апреля 2013

На самом деле должна быть точка с запятой:

tab1text.Invoke(new Action(delegate(){ tab1text.Text = inputLine; }));
1 голос
/ 13 декабря 2010

Вы должны использовать Invoke для редактирования пользовательского интерфейса из другого потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...