C # Invoke Action Cross Thread Доступ - PullRequest
       28

C # Invoke Action Cross Thread Доступ

1 голос
/ 22 января 2010

привет, я новичок в программировании.

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

но я получаю сообщение о том, что они находятся в отдельных потоках. поэтому после поиска в Интернете я придумал это:

this.Invoke(new Action(delegate() { this.ChatRichTextBox.AppendText(EventArgs.commMessage); }));

это сработало, прими, я понятия не имею, что происходит. я просто вставил код, и он работал.

в настоящее время сейчас, хотя мне нужно сделать это по-другому, так как компилятор говорит, что не может выполнять> <! = Операций внутри этого действия. </p>

Посоветуйте, пожалуйста, как лучше всего это реализовать?

Большое спасибо.

1 Ответ

4 голосов
/ 22 января 2010

Доступ к элементам управления Windows Forms не по своей природе потокобезопасен. если ты манипулировать двумя или более потоками состояние контроля, возможно заставить контроль в противоречивое состояние. Другой возможны связанные с потоками ошибки, такие как гоночные условия и тупики. Это важно убедиться, что доступ к вашему контролю выполняется в потокобезопасный способ.

Небезопасно вызывать элемент управления из нить, кроме той, которая создала контроль без использования Invoke способ.

...