Entwickler-Ecke
WinForms - Probleme mit Multhithreaded Anwendung
Speedmaster - Mo 09.03.09 16:26
Titel: Probleme mit Multhithreaded Anwendung
Hallo erstmal nach langer Abwesenheit.
Folgendes Anwendung:
Ich habe eine Voll-skalierbare( D.h. auf n Threads ) Multithreaded Anwendung welche dummerweise auch eine WinForm besitzt( Welche allerdings immer im Main-Thread läuft ).
Die WinForm wird nicht über Application.Run(form); gestartet sondern hat eine Funktion die die Eventverarbeitung übernehmen soll( Mithilfe von Application.DoEvents(); ). Ich kann die Anwendung auch nicht umbauen das ich Application.Run(form) benutze da das die komplette Struktur zerstört und das Konzept der Modularität über den haufen wirft.
Das Problem:
Obwohl die WinForm im MainThread ist und die Event-Verarbeitung auch in diesem stattfindet, sehe ich zwar eine Form, aber diese wird nicht Aktualisiert.
Dieser Fehler tritt allerdings auch nur auf einem Multicore-Rechner auf und nicht auf meinem alten Singlecore-Rechner.
Nun ja, Google scheint mir nicht wirklich die Infos geben zu wollen die ich brauche( Zudem kann ich nur hier in der Arbeit suchen, was meinem Chef nicht grade gefällt ).
Ich wäre für jeden Rat dankbar!
Gruß
Felix aka. Speedmaster
Kha - Mo 09.03.09 17:39
Speedmaster hat folgendes geschrieben : |
| Obwohl die WinForm im MainThread ist und die Event-Verarbeitung auch in diesem stattfindet, sehe ich zwar eine Form, aber diese wird nicht Aktualisiert. |
Zumindest in einer simplen DoEvents-Schleife ist eine Form mit TextBox auf meinem Quad-Core problemlos bedienbar (und ein Kern natürlich konstant auf 100%). In diesem Punkt müsstest du also noch etwas weiter ausholen.
Grundsätzlich sehe ich aber keinen Grund, eine Form
nicht mit Run zu betreiben :nixweiss: .
Speedmaster - Mo 09.03.09 18:58
Kha hat folgendes geschrieben : |
Speedmaster hat folgendes geschrieben : | | Obwohl die WinForm im MainThread ist und die Event-Verarbeitung auch in diesem stattfindet, sehe ich zwar eine Form, aber diese wird nicht Aktualisiert. | Zumindest in einer simplen DoEvents-Schleife ist eine Form mit TextBox auf meinem Quad-Core problemlos bedienbar (und ein Kern natürlich konstant auf 100%). In diesem Punkt müsstest du also noch etwas weiter ausholen.
Grundsätzlich sehe ich aber keinen Grund, eine Form nicht mit Run zu betreiben :nixweiss: . |
Die Form kann ich nicht mit Run betreiben da die Form nicht der einzige "Task" ist der dort bearbeitet wird, bzw da die Anwendung auch ohne Grafische Oberfläche laufen soll.
Ist ein Anwendungsspezifisches Problem da ich das nicht machen kann.
Wie gesagt, wenn ich wüsste warum es nicht geht....dann würde ich das Problem lösen.
Habe bei den letzten Test's auch teile der Anwendung auskommentiert... scheint das Problem nicht zu lösen.
Speedmaster - Di 10.03.09 11:43
Ok das Problem ist gelöst.
Das Problem war das ich ein Task-System habe was sämtliche Teile der Anwendung initialisiert. Das Task System läuft allerdings NICHT in dem Thread in welchem die WinForm später laufen soll.
Die Application.DoEvents() Methode verarbeitet nur Messages für eine Form, welche in dem Thread erzeugt wurde in dem Application.DoEvents() aufgerufen wird.
Da bei mir das Task-System die WinForm erzeugt hatte machte die Anwendung einfach nichts...
Gruß
Felix
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!