ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
12522
12522
EMPFEHLEN
-
Hallo,
Ich muß euch noch einmal mit meinen Fragen "beläßtigen". Ich habe in meinen Programm einen Thread eingebaut, es funktioniert auch alles super bis auf das Beenden des Threades.
Code :1 2 3 4 5 6 7 8 9 10
ThreadStart Test [color=#006400]= [/color][b][color=#008b8b]new [/color][color=#191970]ThreadStart[/color][/b][color=#191970][/color][color=#006400]([/color]ThreadTest[color=#006400]);[/color] Thread thread [color=#006400]= [/color][b][color=#008b8b]new [/color][color=#191970]Thread[/color][/b][color=#191970][/color][color=#006400]([/color]Test[color=#006400]);[/color] tb1[color=#006400].[/color]Text [color=#006400]= [/color][color=#ff00ff]"Warte auf Verbindung... "[/color][color=#006400];[/color] [b][color=#0000ff]if [/color][/b][color=#0000ff][/color][color=#006400]([/color]stopp [color=#006400]== [/color][color=#ff00ff]"ja"[/color][color=#006400])[/color] [color=#006400]{[/color] tb1[color=#006400].[/color]Text[color=#006400]=[/color][color=#ff00ff]"gestoppt"[/color][color=#006400];[/color] thread[color=#006400].[/color][b][color=#191970]Abort[/color][/b][color=#191970][/color][color=#006400](); [/color] thread[color=#006400].[/color][b][color=#191970]Interrupt[/color][/b][color=#191970][/color][color=#006400]();[/color] [color=#006400]} [/color][color=#006400][/color]
Code :1
Code :1 2 3 4 5 6 7 8 9
[color=#ff0000]void [/color][b][color=#191970]ThreadTest[/color][/b][color=#191970][/color][color=#006400]()[/color] [color=#006400]{[/color] [b][color=#008080]try [/color][/b] [b][color=#008080][/color][/b][color=#008080][/color][color=#006400]{[/color] [b][color=#0000ff]while[/color][/b][color=#0000ff][/color][color=#006400]([/color]test[color=#006400]==[/color][b][color=#008b8b]true[/color][/b][color=#008b8b][/color][color=#006400])[/color] [color=#006400]{[/color] [color=#006400].....[/color] [color=#006400]}}[/color] [size=1][color=#006400][size=2][/size][/color][/size]
Gibt es irgendeine möglichkeit die sich im Thread befindende While Schleife zu beenden und die bool variable auf false zu setzen? Ich habe es einfach nicht geschafft. Wie man oben weiter sieht habe ich auch shcon mit thread,Abort und Interuppt Probiert, allerdings hilft es alles nichts, der Thread bleibt immer da. Das Problem ist wenn ich mein Programm schließe ist die Form zwar weg, aber die Threading While schleife funktioniert weiter.
Kann man nicht an void ThreadJob eine variable mit übergeben wie andere Funktionen?
Grüße für eure Hilfe und Ratschläge währe ich sehr Dankbar.
-
Hallo Fridulin!
Wir haben uns ja lang nicht mehr gelesen.
Ich kann mich erinnern das ich Dir mal ein paar Vorschläge zum Thema Threading gemacht hab. Das WorkerThread StarterKit zeigt Dir wie es gekonnt geht.
Bau eine Klasse (namens WorkerThread zB) und füge eine Methode (Run zB) hinzu. Implementier eine Methode StartThread die den Thread startet.
Zitat von Fridulin
Dann brauchts noch eine MemberVariable mit welcher Du letztendlich deinen Thread stoppen kannst.
Also ungefähr so:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
using System; using System.Threading; using System.Windows.Forms; namespace ThreadTest { public class WorkerThread { protected Thread _Thread; protected bool _StopRequest; public Thread GetThread { get { return _Thread; } set { _Thread = value; } } public bool StopRequest { set { _StopRequest = value; } } public string State { get { if ( _Thread != null ) return _Thread.ThreadState.ToString(); else return ThreadState.Unstarted.ToString(); } } public WorkerThread() { _StopRequest = false; } public void StartThread() { if ( _Thread == null || ( _Thread != null && !_Thread.IsAlive ) ) { _StopRequest = false; _Thread = new Thread( new ThreadStart( Run ) ); _Thread.Start(); } } protected void Run() { try { while ( !_StopRequest ) Thread.Sleep( 0 ); } catch {} finally {} } } }MfG, cosmoCode :1 2 3 4 5 6 7 8
public static void Main() { WorkerThread thd = new WorkerThread(); MessageBox.Show( "Thread State = " + thd.State.ToString() ); thd.StartThread(); System.Threading.Thread.Sleep(500); thd.StopRequest = true; MessageBox.Show( "Thread State = " + thd.State.ToString() ); }MfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Hallo, Danke für deine Antwort. Das ist ein schönes Beispiel, ich verstehe nur nicht ganz wie ich jetzt per Button diesen StopRequest setzen kann
Ja ich weiß durch deine damaligen Vorschläge, habe ich auch bischen was zu den Thema gelernt und habe es jetzt ja schonmal hinbekommen das mein Programm mit einem Thread Funktioniert. Habe den Thread wie shcon erwähnt auch in einer While-Schleife gesetzt nur ich wußte/weiß nur eben nicht genau, wie ich mit meiner Form, per Button dieses bool auf false setzen kann der While-schleife, daß er das Thread unterbricht.Code :1 2 3 4
while ( !_StopRequest ) Thread.Sleep( 0 ); } finally {} }
Nebnebi was bedeuet dieses finally {} ? Ist das ne leere Funktion, oder irgendein Befehl?
Grüße und Danke für deine Hilfe.
-
In dem Ausführungs-Beispiel in der Main-Methode ist es doch zu sehen. Du kannst den Code auch in ein Button Event hineinkopieren. Vorher musst Du natürlich den WorkerThread im Form definieren.
Zitat von Fridulin
Code :1 2 3 4 5 6 7 8 9 10 11
private void btnStart_Click( object sender, EventArgs e ){ thd = new WorkerThread(); MessageBox.Show( "Thread State = " + thd.State.ToString() ); thd.StartThread(); } private void btnStopThread_Click(object sender, System.EventArgs e) { if ( thd != null ){ thd.StopRequest = true; MessageBox.Show( "Thread State = " + thd.State.ToString() ); } }Das sind Basics wie der Alex heute schon gesagt hat. Also lerne sie bitte
Zitat von Fridulin
try & catch - Thread
MfG, cosmoMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Achso ist das, jetzt habe selbst ich es kapiert. (hoffe ich) Stimmt darauf hätte ich auch selbst kommen können.
Vielen Dank für die Infos und viele Grüße
-
Und wenn Du jetzt noch ein Event in die WorkerThread Klasse einbaust, welches in der Run-Methode ausgelöst wird,
kannst Du eine Methode in deinem Form damit verknüpfen und hast somit deine erste eigene WorkerThread-Klasse gebaut
und bist hoffentlich nun in der Lage das WorkerThread StarterKit zu verstehen.
Wenn Du nämlich mit größeren Datenmengen arbeitest, wirst Du grantiert Probleme bekommen, weil die Zugriffe nicht Sysnchronisiert sind.
Machs gut, Fridulin.
MfG, cosmoMfG,
Christian
Wer sein Problem definiert, hat es schon halb gelöst!
Bitte markiert eure Themen als erledigt. Sonst macht so ein Forum als Nachschlagewerk keinen Sinn.
The Code Project! - C# Programming | C# / VB.NET Pendants
Regeln + Netiquette
Liebe FIAEs, verlasst euch nicht auf das was in der Berufsschule "vermittelt" wird
und vor allem nicht auf das, was euch die IHK dazu erzählt!
Die haben so viel Ahnung von dem Gewerk, wie der Bundestag vom Haushalt...
-
Hallo,
Zur weiteren Verwendung müsste ich der Klasse ja eine beliebige Funktion (Bsp. DoWork()) übergeben können ,damit diese abgearbeitet wird. Oder verstehe ich da was komplett falsch?
Gruß
Marc
Ähnliche Themen
-
Thread Beenden?
Von jiim im Forum Java GrundlagenAntworten: 6Letzter Beitrag: 07.02.09, 16:49 -
Thread beenden
Von Raabun im Forum .NET CaféAntworten: 7Letzter Beitrag: 20.01.09, 15:38 -
Thread beenden
Von Hillkorn im Forum C/C++Antworten: 2Letzter Beitrag: 16.01.08, 21:08 -
Thread beenden
Von Winner im Forum C/C++Antworten: 10Letzter Beitrag: 07.12.07, 00:15 -
Thread beenden
Von MrPHP im Forum .NET ArchivAntworten: 1Letzter Beitrag: 12.05.04, 16:13





Zitieren
Login




