wielowątkowość - dostęp do kontrolki ListView

0

Witam.. w aplikacji wielowątkowej serwera, przy dostępie do kontrolki ListView otrzymuje komunikat: 'Cross-thread operation not valid: Control 'listView1' accessed from a thread other than the thread it was created on'.
Rozumiem o co chodzi, ale nie wiem jak to zrobić na listView; poniżej przykład z MSDN'a dotyczący danego komunikatu dla textboxa.

Jak to powinno wyglądać dla ListView? chodzi mi o blok w warunku if..

Thread.Sleep(2000);

    string text = "Written by the background thread.";
    // Check if this method is running on a different thread
    // than the thread that created the control.
    if (this.textBox1.InvokeRequired)
    {
        // It's on a different thread, so use Invoke.
        SetTextCallback d = new SetTextCallback(SetText);
        this.Invoke
            (d, new object[] { text + " (Invoke)" });
    }
    else
    {
        // It's on the same thread, no need for Invoke
        this.textBox1.Text = text + " (No Invoke)";
    }
0

Pewny jesteś że załącz\oąny kod działa? Moim zdaniem powinno byc this.textBox1.Invoke()

  1. Metoda Invoke i properta InvokeRequired pochodzą z klasy Control która jest dziedziczona przez TextBox i ListView. Wywołanie bedzie analogiczne z tym że inny będzie delegat wywoływanej funkcji.
0

Przykładowo tak:

 internal void EditListView()
        {
            if (this.listView.InvokeRequired)
            {
                this.BeginInvoke(new EditListView);
                return;
            }
            else
            {
                //tu grzebiemy w naszej kontrolce ListView
                ...
                ...

            }
        }

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