Hej,
podczas pisania programu z socketami w tle doszedłem do problemu,
którego nie mogę przeskoczyć. Mianowicie:
mam klasę Serwer, w której istnieje sobie prosta metoda WpiszDoLoga
oraz event, który ma wysyłać zainteresowanym to co zwraca ta metoda,
kiedy zostanie wykonana:
class Serwer
{
public delegate void WpiszHandler(string tekst);
public event WpiszHandler OnWpisano;
public string WpiszDoLoga(string tekst)
{
if (OnWpisano != null)
OnWpisano(tekst);
return tekst;
}
}
teraz mam inną klasę, która realizuje mi formę, oraz reaguje na
zdarzenie w stworzonym obiekcie "przekaznik":
class ServerForm : Form
{
Serwer Przekaznik;
public ServerForm()
{
InitializeComponent();
przekaznik = new Serwer();
przekaznik.OnWpisano += new Serwer.WpiszHandler(przekaznik_OnWpisano);
}
void przekaznik_OnWpisano(string tekst)
{
RichTextBox1.AppendText(tekst);
}
Wszystko "komplikuje" się ładnie pięknie, do momentu, kiedy nie
zostanie gdzieś wywołana funkcja WpiszDoLoga(), wtedy dostaję
komunikat:
"Nieprawidłowa operacja między wątkami: do formantu 'RichTextBox1' uzyskiwany jest dostęp z wątku innego niż wątek, w którym został utworzony."
MSDN proponuje mi wykorzystanie tzw SafeThreading z wykorzystaniem
Invoke, ale za cholerę nie wiem co to jest i jak się to gryzie :(
Czy ktoś wie jak to zrobić??