Benutzer mit den meisten Antworten
Methode in zweiten Thread auslagern

Frage
-
Hallo,
ich will eine Methode in einen anderen Thread auslagern um sie, wenn sie zu lange dauert, abbrechen zu können.
Ich habe zwei Möglichkeiten gefunden, aber beide sind nicht befriedigend:1. Möglichkeit:
ParameterizedThreadStart pts = new ParameterizedThreadStart(this.myMethode); Thread thread = new Thread(pts); thread.Start(new Object()); private void myMethode(Object parameter) { //Tu was... }
Die 1.Möglichkeit scheint nicht zu funktionieren, wenn die Methode myMethode keinen Parameter hat.
2. Möglichkeit:
myThread = new Thread(delegate() { startProcess(); }); myThread.Start(); private void startProcess() { process.Start(); }
Bei dieser 2.Möglichkeit ist die Methode myThread.Suspend() deprecated (veraltet).
(Um den Thread wieder zu stoppen, was mein eigentliches Anliegen des Nutzen eines weiteren Threads ist.)Wie rufe ich eine Methode im extra Thread auf und stoppe diesen, wenn die Methode keine Parameter besitzt?
Frank
Antworten
-
Hallo Frank,
verwende anstatt der Basis Thread-Klasse die TPL Methoden. Dort steht mit der CancellationTokenSource ein einheitlicher und robuster Mechanismus zur Verfügung.
Für ein Beispiel siehe Task Cancellation
Gruß Elmar
- Als Antwort markiert frank me Montag, 14. Dezember 2015 09:54
Alle Antworten
-
Hallo Frank,
Thread-Methoden nehmen immer einen Parameter entgegen. So ist das Designkonzept. Wenn dies anders sein soll, kannst du dir maximal einen Wrapper drum herum bauen und dann null für den Parameter übergeben. Es bleibt allerdings dabei dass die erste aufgerufene Methode das Parameter-Objekt entgegen nimmt. Etwas nennenswert anderes wird in Möglichkeit 2 auch nicht gemacht.
Da es dir aber sowieso nur ums Stoppen des Threads geht verweise ich mal auf deine andere Frage: Thread (Backgroundworker) richtig beenden
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo Frank,
verwende anstatt der Basis Thread-Klasse die TPL Methoden. Dort steht mit der CancellationTokenSource ein einheitlicher und robuster Mechanismus zur Verfügung.
Für ein Beispiel siehe Task Cancellation
Gruß Elmar
- Als Antwort markiert frank me Montag, 14. Dezember 2015 09:54