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

user profile iconSpeedmaster hat folgendes geschrieben Zum zitierten Posting springen:
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

user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconSpeedmaster hat folgendes geschrieben Zum zitierten Posting springen:
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