C# Доступ к элементу, созданного в другом потоке

C# net многопоточность

***class1.cs***
public class PCom
{
//-----------------some code---------
protected virtual void StartThread()
{
//Set local variables
AsyncCall MyCall = new AsyncCall(this.StartListen);
System.AsyncCallback MyCallBack = new System.AsyncCallback(this.EndListen);
MyCall.BeginInvoke(MyCallBack,MyCall);
}

protected virtual void EndListen(System.IAsyncResult Result)
{
//Get delegate
AsyncCall MyCall = (AsyncCall)Result.AsyncState;
//Get data
System.Byte []Buffer = MyCall.EndInvoke(Result);

//Start a new request for data
this.StartThread();

//Get EventArgs
P2PComEventArgs EventArgs = this.FromXml(Buffer);

//Rise event
this.OnMessage(this,EventArgs);
}
//-----------some code---------
}


***class2***
//----------some code-----------
protected void OnMessage(System.Object Sender, PComEventArgs Args)
{
this.ShowMessages.Text = Args.Name; //-тут InvalidOperationException
}


InvalidOperationException
Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "ShowMessages" не из того потока, в котором он был создан.

Подскажите пожалуйста как поправить. Сразу скажу, что с потоками работаю впервые и библиотека PCom сторонняя

Примечание:
UPD#
В class1 есть такие строки еще
***
public delegate void P2PComEventHandler(System.Object Sender, P2PComEventArgs Args);
public event P2PComEventHandler OnMessage;
public delegate void P2PErrorEventHandler(System.Object Sender, System.String HostName);
public event P2PErrorEventHandler OnError;
***

Примечание:
UPD2#
P2PCom следует читать как PCom

Примечание:
это ссылка на библиотеку
https://docs.google.com/document/edit?id=1KfgqPWh438J7AVGQAuCEuAZF0tQzQBJJtG-H0G3V4ME&hl=ru


это куски кода приложения
***********mainform*****
public MainForm()
{
--some code--
this.P2PCom = new libP2PChat.P2PCom(this.Port);
this.P2PCom.Name = System.Net.Dns.GetHostName();
this.P2PCom.OnMessage += new libP2PChat.P2PCom.P2PComEventHandler(this.OnMessage);
--some code--
}
--some code--
protected libP2PChat.P2PCom P2PCom;
--some code--
protected void OnMessage(System.Object Sender,libP2PChat.P2PComEventArgs Args)
{
this.ShowMessages.Text = Args.Name; <--InvalidOperationException
}



Не хотел захламлять кодом, но по-другому наверное никак. Что здесь не так - подскажите пожалуйста
Ответы:
Какого фига в class1 вызывается this.OnMessage, который находится в class2? class2 унаследовал class1 ?
"с потоками работаю впервые"
http://www.rsdn.ru/article/dotnet/CSThreading1.xml
Параграф 2.
>Не хотел захламлять кодом, но по-другому наверное никак.
Такое мало кто читать будет
Извиняй, что на VB, но перевести можно онлайновым переводчиком например http://www.developerfusion.com/tools/convert/vb-to-csharp/
Здесь функция ChangeStatusSub вызывается raiseEvent'ом
Вопрос закрыт. Помог Google.Поиск


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.