***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
}
Не хотел захламлять кодом, но по-другому наверное никак. Что здесь не так - подскажите пожалуйста
RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.
Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.
Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.