C# Cross - thread problem

0

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ć??

0

Nie mozesz zmieniac komponentow watku (formularz) z innego watku. Napisz w formularzu metode wpisujaca w komponent to co tam ma byc, a w metodzie, ktora to wywoluje uzyj Invoke na obiekcie formularza. To spowoduje, ze watek formularza przejmie wpisywanie wartosci i konfliktu nie bedzie.

pozdrawiam
johny

1 użytkowników online, w tym zalogowanych: 0, gości: 1