Laden...

WinForms-Anwendung hängt aus unerklärlichen Gründen

Erstellt von christof.k vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.738 Views
C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 15 Jahren
WinForms-Anwendung hängt aus unerklärlichen Gründen

Hallo,

ich habe eine relativ simple Anwendung geschrieben, welche neben der GUI zwei weitere Threads nutzt.

Auf meinen und anderen PC's läuft die Anwendung wie erwartet.
Auf manchen anderen PC's hängt sich die Anwendung vor dem Start eines Threads auf und nimmt keine Kommandos mehr entgegen.
Ich habe dies auf die folgende Zeile eingrenzen können indem ich in die ThreadFunction eine Ausgabe gelegt habe. Diese wird nicht aufgerufen.

MyThread = new Thread(new ThreadStart(ThreadFunction));
RxThread.Start();

Vielmehr hängt die Anwendung bei der Zeile

RxThread.Start();

da eine Ausgabe direkt danach nicht erfolgt.

Alle Kommunkationen der Threads mit der GUI laufen über Invoke aufrufe.

Das komische ist, sobald ich mit der rechten Maustaste auf das Programm in der Taskleiste drücke, läuft meine Anwendung weiter und der Thread wird gestartet....Ich habe dafür keine Erklärung.

Ich hoffe Ihr könnt mit dieser Wagen Aussage etwas anfangen oder zumindest einen Tip geben, was ich zu tun habe.

Danke

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 15 Jahren

Kleiner Nachtrag:

Wieso auch immer scheint es daran zu hängen, dass ich mit


            Console.SetOut(myTextWriter);
            Console.SetError(myErrorTextWriter);

die Consolen in eine RTF Textbox umzuleiten.
Ich kann mir nicht vorstellen, wie das mit dem anderen Thread in Verbindung steht, aber es ist so.

Kann ich mir irgend eine Art von Deadlock hier einhandeln?

Der genannte Thread macht am Anfang noch keine Ausgabe an die Console.

Mit der Hoffnung auf Hilft

Christof

P.S.: Die PC Abhängigkeit scheint zwischen Single- und Dualcore zu sein. Bei Dualcore klappts, bei Singlecore nicht......komisch

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo christof.k,

tja, aus der vagen Beschreibung ist es wirklich schwer, was konkretes abzuleiten.

Grundsätzlich kannst du dir mit Control.Invoke Deadlocks einhandeln.

Dass es auf einem Rechner läuft und auf einem anderen nicht, klingt nach einer Racing Condition.

Wenn du mit Konsolenausgaben testest, die in eine TextBox umgelenkt werden, dann ist das nicht wirklich ein Test, denn du weißt ja nie, ob die Ausgabe nicht erfolgt, weil das Programm vorher hängt oder weil es wegen des Umlenkens hängt. Ich würde auf letzteres tippen. Es gibt sonst keinen Grund, warum Thread.Start hängen sollte.

herbivore

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 15 Jahren

Tjojo...schwer für mich hier weiterzumachen.

Mich wundert nur, was passiert wenn ich mit der rechten Maustaste auf meine Applikation in der Taskleiste clicke, da dann dieser Deadlock aufgehoben wird. Dies würde bei der Analyse helfen.....

Christof