Ich habe folgendes Problem unter http://bytes.com/topic/c-sharp/answers/935867-stop-run-thread-some-place#post3709890. Bitte hier und in Deutsch antworten.
:
Gesperrt durch User
naja (ich weiß nicht was für programmiesprache das ist (laut link c#), aber ich glaube das passt:) >. How to stop .... the thread gar nicht, der muss sich SELBER beenden.. Abort(): >Raises a ThreadAbortException in the thread on which it is invoked, to >begin the process of terminating the thread. Calling this method usually >terminates the thread. zwischen deinem Abort und start ist ja NIX.. wie soll der thread da irgendwas machen können ??
stre läßt sich nicht starten, weil wegen einem ungültigen Threadzustand. Vemutlich weil stre nicht im Hauptthread neugestartet wird, von dem es zuerst gestartet wurde.
Fidelis Sobotta schrieb: > Du hast das Problem nicht erkannt. "Das glaube ich nicht, Tim!" Solange dein Thread das Abort nicht angenommen hat, läuft er noch und ist im Zustand AbortRequested. Da du aber sofort danach versuchst, ihn neu zu starten, hat er ja noch gar keine Zeit gehabt, den Abort-Request anzunehmen. Nur zum Verständnis: Threads bricht man niemals einfach so ab. Man läßt sie sich selbst beenden.
stre läßt sich nicht starten, weil wegen einem ungültigen Threadzustand. Vemutlich weil stre nicht im Hauptthread neugestartet wird, von dem es zuerst gestartet wurde.
Normalerweise sollte sich ein Thread selbst beenden. Mach doch ne globale Variable als Kill-Flag, in das das Hauptprogramm schreiben darf, und welches im Thread gelesen wird. Sobald der Thread kill=true erkennt, beendet er sich selbst.
Kan asta schrieb: > Normalerweise sollte sich ein Thread selbst beenden. > > Mach doch ne globale Variable als Kill-Flag, in das > das Hauptprogramm schreiben darf, und welches im > Thread gelesen wird. Sobald der Thread kill=true > erkennt, beendet er sich selbst. Es geht nicht ums Beenden sondern ums Starten, das wegen einem ungültigen Threadzustand nicht funktioniert. Zugreifen, also Beenden funktioniert, aber neu starten nicht.
Fidelis Sobotta schrieb: > Zugreifen, also Beenden > funktioniert, aber neu starten nicht. normalerweise kann man Threads nicht neustarten.
versuch mal, einen neuen Thread zu starten, anstatt einen alten Thread neuzustarten.
Fidelis Sobotta schrieb: > Ich habe folgendes Problem unter > http://bytes.com/topic/c-sharp/answers/935867-stop-run-thread-some-place#post3709890. > > Bitte hier und in Deutsch antworten. Was die Doku dazu sagt: "Once the thread terminates, it cannot be restarted with another call to Start." Oder in Deutsch: wenn ein Thread beendet ist kann er nicht mit einem Aufruf von Start() erneut gestartet werden. Hmm, liest eigentlich niemand mehr die Doku von irgendwelchem Zeug? Tsk, tsk, tsk.
Jasch schrieb: > Oder in Deutsch: wenn ein Thread beendet ist kann er nicht mit einem > Aufruf von Start() erneut gestartet werden. Ich übergebe einem Thread neue Parameter. Wie soll ich das ohne Neustart tun?
Fidelis Sobotta schrieb: > Jasch schrieb: >> Oder in Deutsch: wenn ein Thread beendet ist kann er nicht mit einem >> Aufruf von Start() erneut gestartet werden. > > Ich übergebe einem Thread neue Parameter. Wie soll ich das ohne Neustart > tun? Wieso muss sich der Thread beenden bevor er neue Parameter bekommt? Du hast 2 Möglichkeiten: 1.) Thread nicht beenden, sondern nur neue Daten füttern. 2.) Thread beenden und einen neuen Thread starten gruß cyblord
cyblord ---- schrieb: > Wieso muss sich der Thread beenden bevor er neue Parameter bekommt? Stelle keine Fragen, auf die du keine Antwort willst. > 2.) Thread beenden und einen neuen Thread starten Genau das geht nicht.
Fidelis Sobotta schrieb: > cyblord ---- schrieb: >> Wieso muss sich der Thread beenden bevor er neue Parameter bekommt? > Stelle keine Fragen, auf die du keine Antwort willst. Sollte besser heißen: Stelle keine Fragen, wenn eh schon klar ist, daß dein Gegenüber sie nicht versteht. Man kann mit Threads auch recht einfach kommunizieren, während sie laufen und nicht nur durch Übergabe von Parametern beim Start. Das ist ja gerade das Tolle an Threads. >> 2.) Thread beenden und einen neuen Thread starten > Genau das geht nicht. Wie kommst du darauf? Du hast bisher nur probiert, den alten Thread nochmal zu starten. Hier mal zwei Links, die ich auf die Schnelle dazu gefunden hab: http://msdn.microsoft.com/de-de/library/yy12yx1f(v=vs.80).aspx http://msdn.microsoft.com/de-de/library/7a2f3ay4(v=vs.80).aspx Aber wieso fragst du hier überhaupt, wenn du eh keinerlei Interesse an den Antworten hast?
Weshlb den Thread nicht durchlaufen lassen? Was soll ein abbruch denn bringen?
Die WindowsAPI z.b. bietet die Funktion TerminateThread für Killen von Thread von Außerhalb des Threads. Hat da C-Sharp nichts ?
Rolf Magnus schrieb: > Fidelis Sobotta schrieb: >> cyblord ---- schrieb: >>> Wieso muss sich der Thread beenden bevor er neue Parameter bekommt? >> Stelle keine Fragen, auf die du keine Antwort willst. > > Sollte besser heißen: Es heißt genau das, was ich schreibe.
Fidelis Sobotta schrieb: > Rolf Magnus schrieb: >> Fidelis Sobotta schrieb: >>> cyblord ---- schrieb: >>>> Wieso muss sich der Thread beenden bevor er neue Parameter bekommt? >>> Stelle keine Fragen, auf die du keine Antwort willst. >> >> Sollte besser heißen: > Es heißt genau das, was ich schreibe. Genau! Und bitte hier und in Deutsch antworten!
Ah, also hat es, wie ich schon vermutet habe, keinen Sinn, dir weiter zu antworten, da du an Antworten eh nicht interessiert bist und keine Lust hast, das eigentliche Problem wirklich zu verstehen. Das sieht man ja auch schon daran, daß du bisher sämtliche Vorschläge einfach ignoriert hast. Wenn du eh alles besser kannst als andere und der einzige bist, der Threads wirklich verstanden hat, dann hast du doch dein Problem sicher schon lange gelöst und brauchst gar keine Hilfe.
Fidelis Sobotta schrieb: > Ich übergebe einem Thread neue Parameter. Wie soll ich das ohne Neustart > tun? Wahrscheinlich ist dein Ansatz falsch! Wenn Du uns verrätst was dieser "Thread" genau machen soll, dann kann man dir weiter helfen bzw. einen guten Ansatz für eine Lösung vermitteln.
Fidelis Sobotta schrieb: >> 2.) Thread beenden und einen neuen Thread starten > Genau das geht nicht. Das macht aber dein Code nicht und wenn er es machen würde, dann gibt es elegantere Lösungen.
1 | private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) |
2 | {
|
3 | if (stre != null) |
4 | {
|
5 | stre.Abort(); |
6 | }
|
7 | stre.Start(); |
8 | }
|