Funktion erst nach einem Thread ausführen..!
-
Wie jetzt? Check ich net, kann mir einer helfen der mehr Ahnung davon hat!?
Tzzzzzzzz......
-
Beim Aufruf th.Join(); warted das Programm so lange, bis der Thread th abgearbeitet wurde. Wenn das Programm dort hängen bleibt heisst das wahrscheinlich, dass die Methode irgend_ne_func in einer Endlosschleife hängen bleibt. Dementsprechend bleibt das Programm stehen. Schau mal, was in irgend_ne_func passiert.
*Edit
Wie jetzt? Check ich net, kann mir einer helfen der mehr Ahnung davon hat!?
Tzzzzzzzz......Bevor du hier grosse Töne spuckst... das .Join() war der absolut richtige Hinweis. Ausserdem war deine Fehlerbeschreibung nicht gerade präzise.
-
Hobby-Progger schrieb:
Wie jetzt? Check ich net, kann mir einer helfen der mehr Ahnung davon hat!?
Tzzzzzzzz......Diesen Beitrag habe ich nicht geschrieben..!
Das ist das prob wenn man sich nciht anmeldet, aber das es noch solche Luete gibt, die nichts anderers zu tun haben, also einfach mal zu nerven finde ich einfach nur s*****..!
-
Hobby-Progger(der echte) schrieb:
Hobby-Progger schrieb:
Wie jetzt? Check ich net, kann mir einer helfen der mehr Ahnung davon hat!?
Tzzzzzzzz......Diesen Beitrag habe ich nicht geschrieben..!
Das ist das prob wenn man sich nciht anmeldet, aber das es noch solche Luete gibt, die nichts anderers zu tun haben, also einfach mal zu nerven finde ich einfach nur s*****..!Haha, es gibt wirklich Leute, die einfach zu viel Zeit haben ^^ Melde dich doch einfach an, kostet ja nix, ausser vielleicht 1-2 min Zeit
-
icarus2 schrieb:
Beim Aufruf th.Join(); warted das Programm so lange, bis der Thread th abgearbeitet wurde. Wenn das Programm dort hängen bleibt heisst das wahrscheinlich, dass die Methode irgend_ne_func in einer Endlosschleife hängen bleibt. Dementsprechend bleibt das Programm stehen. Schau mal, was in irgend_ne_func passiert.
*Edit
Wie jetzt? Check ich net, kann mir einer helfen der mehr Ahnung davon hat!?
Tzzzzzzzz......Bevor du hier grosse Töne spuckst... das .Join() war der absolut richtige Hinweis. Ausserdem war deine Fehlerbeschreibung nicht gerade präzise.
Hast recht, aber das war ich nicht. Siehe einen Beitrag oberhalb..!
Zurück zum Thema..:
Meine irgend_ne_func methode funktioniert schon richtig..!
Zum Beispiel funkt das hier ohne Prob..:private void eine_func() { Thread th = new Thread(irgend_ne_func); th.Start(); }
Also hier läuft das prog normal, die "irgend_ne_func"-Methode wird auch sicher beendet..!
Aber der Code..:
private void eine_func() { Thread th = new Thread(irgend_ne_func); th.Start(); th.Join(); }
bleibt hängen..!
Wenn ich debugge sehe ich, das es die Zeile "th.Join();" ist die daran Schuld ist..!
-
icarus2 schrieb:
Hobby-Progger(der echte) schrieb:
Hobby-Progger schrieb:
Wie jetzt? Check ich net, kann mir einer helfen der mehr Ahnung davon hat!?
Tzzzzzzzz......Diesen Beitrag habe ich nicht geschrieben..!
Das ist das prob wenn man sich nciht anmeldet, aber das es noch solche Luete gibt, die nichts anderers zu tun haben, also einfach mal zu nerven finde ich einfach nur s*****..!Haha, es gibt wirklich Leute, die einfach zu viel Zeit haben ^^ Melde dich doch einfach an, kostet ja nix, ausser vielleicht 1-2 min Zeit
Habe hier schon ein account, das prob ist, dass ich grad nicht an meinem PC sitze und mein Pass nicht im Kopf hab, deshalb das ganze..!
-
Hi,
Ist es eigentlich nicht so, dass th.Join(); den th-Thread blockiert ???Also in http://msdn.microsoft.com/de-de/library/system.threading.thread.join%28v=vs.80%29.aspx steht das auf jeden Fall so.
-
Hobby-Progger(der echte) schrieb:
bleibt hängen..!
Wenn ich debugge sehe ich, das es die Zeile "th.Join();" ist die daran Schuld ist..!Ja das ist doch auch richtig? Join() blockiert den laufenden GUI-Thread solange bis der gestartete Thread fertig ist, was so natürlich keinen Sinn macht weil du dir den Thread gleich hättest sparen können.
Die Nachrichten-Schleife von Windows wird dadurch nicht weiter abgearbeitet so dass Windows z.B. nach nem Klick in die Form vermutet deine Anwendung wäre in ner Endlosschleife gefangen oder einfach tot.Nimm einfach den BackgroundWorker statt nem Standard-Thread und hau deine MessageBox in dessen RunWorkerCompleted-Event.
-
geeky schrieb:
Hobby-Progger(der echte) schrieb:
bleibt hängen..!
Wenn ich debugge sehe ich, das es die Zeile "th.Join();" ist die daran Schuld ist..!Ja das ist doch auch richtig? Join() blockiert den laufenden GUI-Thread solange bis der gestartete Thread fertig ist, was so natürlich keinen Sinn macht weil du dir den Thread gleich hättest sparen können.
Die Nachrichten-Schleife von Windows wird dadurch nicht weiter abgearbeitet so dass Windows z.B. nach nem Klick in die Form vermutet deine Anwendung wäre in ner Endlosschleife gefangen oder einfach tot.Nimm einfach den BackgroundWorker statt nem Standard-Thread und hau deine MessageBox in dessen RunWorkerCompleted-Event.
DANKE geeky, mit einem Backgroundworker funktioniert es einwandfrei..!
Aber erklär mir mal bitte eins..:
So, wie ich das verstanden hab, blockiert Join(); den GUI-Thread und nicht den "Neben"-Thread. Also wartet meine Form, dass mein Thread seine Arbeit erledigt hat, aber wieso klappt dann der Code ja nicht ?:private void eine_func() { Thread th = new Thread(irgend_ne_func); th.Start(); th.Join(); //hier weitere befehle }
Ich meine, wenn th.Join(); ja de GUI-Thread blockiert, dann werden ja die folgende Befehle nicht weiter ausgeführt, bis mein Thread fertig ist. Wieso endet aber mein Thread nicht und mein prog bleibt hngen..?
Das mit der Nachrichten-Schleife habe ich nicht richtig verstanden..!
Wäre nett wenn du es ein wenig erläutern köntest..!
Danke..!
-
Hobby-Progger(der echte) schrieb:
Hi,
Ist es eigentlich nicht so, dass th.Join(); den th-Thread blockiert ???Also in http://msdn.microsoft.com/de-de/library/system.threading.thread.join%28v=vs.80%29.aspx steht das auf jeden Fall so.
Nein. Nicht den th-Thread, sondern den aufrufenden Thread.
-
Das einfachste wäre doch aber wohl ein Event, wenn der Thread fertig ist?
Anschließend wird noch invoked und fertig. - Ein Join ist doch garnicht notwendig.
public class MyThreadClass { public event EventHandler MyEvent; public void Start() { Thread th = new Thread(new ThreadStart(MyThreadFunction)); th.Start(); } public void MyThreadFunction() { // .... viel code if(MyEvent != null) MyEvent(this, EventArgs.Empty); } }
Und im Form:
public class MyForm: Form { delegate void ShowMyMessageDelegate(); MyThreadClass myThread = new MyThreadClass(); MyForm() { myThread.MyEvent += new EventHandler(ThreadFinished); } void ThreadFinished(Object sender, EventArgs e) { this.ShowMessage(); } void ShowMessage() { if(this.InvokeRequired) { this.Invoke(new ShowMessageDelegate(ShowMessage)); return; } MessageBox.Show(""); } }
-
Hobby-Progger(der echte) schrieb:
Wieso endet aber mein Thread nicht und mein prog bleibt hngen..?
Ohne zu wissen das deine Funktion in dem Thread macht kann man die Frage nicht beantworten, aber google mal nach "Deadlock" und überleg Dir ob das hier zutreffen kann. Könnte sein das Dein zweiter Thread auf etwas wartet was der erste Thread machen muß, vielleicht ein Invoke oder sowas. Schon haste ein Deadlock.
-
Leute danke euch..!
Mit dem Background worker funk es zwar einwandfrei...werde mir aber auch den Code von inflames2k (Event) ansehen und ausprobieren..!