1. #1
    Avatar von rVs14
    Registriert seit
    18.11.2011
    Beiträge
    983
    Thanked 513 Times in 338 Posts

    Standard Thread Probleme mit Invoken

      Mainwork mw = new Mainwork(this, email, pass, secret);

    playerthread = new Thread(mw.DoMainWork);
    playerthread.Start();


    Mit dem Code starte ich den Thread.

    Dann bekomme ich folgenden Exception:
    Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement listView1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
    Dann müsste ich ja den Listview invoken, aber ich hab ja meinen Thread bereits mit meiner Funktion gestartet(mw.DoMainWork).
    Ich hoffe mal ihr wisst was ich meine, danke schonmal!
    Geändert von rVs14 (14.12.2013 um 21:31 Uhr)

  2. The Following User Says Thank You to rVs14 For This Useful Post:

    SamEvilash (30.10.2018)

  3. #2

    Registriert seit
    11.01.2013
    Beiträge
    32
    Thanked 8 Times in 7 Posts

    Standard AW: Thread Probleme mit Invoken

    Hallo,
    Du solltest die Arbeit in andere Threads auslagern, die UI-Operation sollten aber von einem thread aus erfolgen, sonst kann es zu Problemen kommen.

  4. #3
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    8.133
    Thanked 9.412 Times in 3.248 Posts
    Blog Entries
    5

    Standard AW: Thread Probleme mit Invoken

    Zitat Zitat von rVs14 Beitrag anzeigen
    Dann müsste ich ja den Listview invoken, aber ich hab ja meinen Thread bereits mit meiner Funktion gestartet(mw.DoMainWork).
    Ich hoffe mal ihr wisst was ich meine, danke schonmal!
    Ne eigentlich nicht. Du hast die Antwort doch schon selbst gesagt: Das Control muss invoked werden wenn es wie bei dir aus einem anderen Thread aufgerufen wird und trotzdem threadsicher sein soll, wieso tust du es dann nicht? xD
    Zum Prüfen gibt es die Eigenschaft InvokeRequired, dann ist das ganze flexibel einsetzbar. Ich würde da produktiv aber eher einer Hilfsfunktion nutzen:

    void InvokeIfRequired(ISynchronizeInvoke control, MethodInvoker action){
    if (control.InvokeRequired) {
    control.Invoke(action);
    } else {
    action();
    }
    }

    Dann hast du nicht bei jedes mal ne If-Abfrage nach dem Schema if(control.InvokeRequired) usw. sondern rufst einfach InvokeIfRequired auf:

    testControl.InvokeIfRequired(() => {
    // Was auch immer mit dem Control gemacht werden soll, zb
    testControl.Enabled = false;
    });

    Hast den Thread ja als gelöst markiert, aber vielleicht bringts dir oder ansonsten jemand anderem trotzdem was.


  5. The Following 2 Users Say Thank You to DMW007 For This Useful Post:

    DiscoDieter (16.12.2013), SamEvilash (30.10.2018)

Ähnliche Themen

  1. Der STRG+V Thread
    Von Mr.Bombastic im Forum OffTopic
    Antworten: 61
    Letzter Beitrag: 13.03.2015, 02:50
  2. [BUG] Thread erstellen
    Von DANP im Forum Feedback
    Antworten: 1
    Letzter Beitrag: 26.12.2013, 23:58
  3. Antworten: 1
    Letzter Beitrag: 07.07.2013, 17:16
  4. Java New Thread
    Von uncopyable im Forum Java
    Antworten: 2
    Letzter Beitrag: 04.04.2012, 14:45
  5. Antworten: 2
    Letzter Beitrag: 04.01.2012, 23:55
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.