Debug in Thread geht nicht

15/10/2007 - 09:10 von Daniel Boss | Report spam
Guten Morgen zusammen

Als erstes muss ich erwàhnen dass ich relativ neu bin im C# und ursprünglich
aus der C++ Welt komme.

Bei meinem kleinen Projekt wollte ich eine Modale Form in den Vordergrund
stellen, welche einen Progress-Bar beinhaltet.
Damit möchte ich den Kunden zeigen wielange es noch ca dauert, bis der
gewàhlte Vorgang abgeschlossen ist.

Der Code zum anzeigen der Form sieht ca. so aus.

public void myShow()
{
Thread th = null;
ThreadStart ts = new ThreadStart(WorkThread);
th = new Thread(ts);

this.Load += delegate { th.Start(); };
this.ShowDialog();
}

public void WorkThread()
{
int a= 0;
int b= 0;
}

Das ganze funktioniert auch Problemlos, nur habe ich gemerkt dass ich den
Thread "WorkThread" nicht debuggen kann.
Wenn ich einen Breakpoint auf die erste Zeile setze, und das Programm dann
starte, dann springt mir VS2005 auch auf diese Zeile, jedoch kann ich rein
gar nichts machen. Kann weder debuggen(F10 usw.) noch kann ich das Programm
weiter normal laufen lassen.

Gibt es einen bestimmten Grund wieso man den Thread nicht debuggen kann? Hab
irgendwo gelesen dass man auf keine GUI zugreiffen soll...
Das kann aber nicht der Grund sein, da es auch stehen bleibt wenn ich nur
"int a=0;" im Code drin stehen habe.

Wàre schön zu wissen wie man Threads normal debuggen kann... :-)

Grüsse
Dani
 

Lesen sie die antworten

#1 Frank Dzaebel
15/10/2007 - 14:10 | Warnen spam
Hallo Daniel,

Bei meinem kleinen Projekt wollte ich eine
Modale Form in den Vordergrund stellen,
welche einen Progress-Bar beinhaltet.
Damit möchte ich den Kunden zeigen wielange
es noch ca dauert, bis der
gewàhlte Vorgang abgeschlossen ist.



Zunàchst solltest Du folgendes im Groben kennen:

[Bearbeiten von Steuerelementen aus Threads]
http://dzaebel.net/Controlinvoke.htm

Weiterhin Grundlage, dass alle managed Threads
wàhrend eines Breakpoints angehalten werden
(die non-managed Threads übrigens nicht). Wenn
Du jetzt bspw. "this" überwachen willst
(das in einem anderen Thread liegt), würde ersteinmal
pro Eigenschaft von this ein Auswertungs-Exception
"by design" erzeugt werden (müssen). Das
dauert, sollte aber nach
einer gewissen Zeit wieder handlebar sein.


public void WorkThread()
{ int a= 0;
int b= 0;
}



Beachte auch, dass a und b ggf. vom Compiler auch
wegoptimiert werden können, denn sie
werden nicht benötigt.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen