C# Threads

vintner

Cadet 4th Year
Registriert
Mai 2010
Beiträge
95
Hallo,

ich würde gerne einen Thread einer Instanz wie folgt starten:
Code:
UDPTransmitter udp = new UDPTransmitter();
ThreadStart del = new ThreadStart(udp.startTransmit);     //Hier wird ein Typ erwartet, kein Objekt
Thread thread = new Thread(del);
thread.Start();
Leider erhalte ich eine Fehlermeldung, dass anstelle des Objektes, der Typ, also der Klassenname erwartet wird.
Gibt es in C-Lattenzaun überhaupt die Möglichkeit eine Instanz einer Klasse zu erstellen und als Thread laufen zu lassen?

Grüße

P.S.: Visual Studio 2012
 
Zuletzt bearbeitet:
Generell würde ich keine Threads selbst erzeugen, es gibt genügend andere Alternativen, wie z.B. den ThreadPool, oder die Begin/End-oder Async(ab .net 4.5)-Methoden im UdpClient.
 
Zuletzt bearbeitet:
Du kannst statt ThreadStart auch einfach einen Action-Delegate benutzen:
Code:
UDPTransmitter udp = new UDPTransmitter();
Thread thread = new Thread(new Action(() => udp.startTransmit());
thread.Start();

Wie "Spezialist" aber schon richtig sagte, gibt es heute unter .NET kaum mehr einen Grund einen Thread direkt zu starten. Wenn die Klasse keine Async-Methode anbietet sollte man zumindest den ThreadPool verwenden.
 
Variante für Schreibfaule:
Code:
new Thread(() => new UDPTransmitter().startTransmit()).Start();

Unter .NET 4.5 kannst du dir auf jedenfall mal das neue Async/Await anschauen. Gibt aber wie gesagt zig Möglichkeiten. Ich erwische mich immer irgendwie dabei bei Threads jedesmal anderen Code zu schreiben oO
 
Vielen lieben Dank für die tollen Antworten.
Ich arbeite mit C# nur für meine Abschlussarbeit ... beschäftige mich eig. mehr mit Java ...
Dann werde ich mich ein bisschen mehr mit euren Lösungsvorschlägen beschäftigen.

Viele Grüße :)
 
Spezialist schrieb:
ThreadStart will eine static-Methode als Einstiegspunkt haben, keine normale aus einem Objekt.
laut

http://msdn.microsoft.com/de-de/lib...?cs-save-lang=1&cs-lang=csharp#code-snippet-2

kann man auch nicht-statische Methoden als Einstiegspunkt verwenden. Eigentlich sollte es so, wie vintner es gemacht hat, funktionieren.

@vintner: poste doch mal die genaue Fehlermeldung. Vielleicht liegt das Problem gar nicht im Parameter von ThreadStart(). Vielleicht kennt der Compiler die Klasse ThreadStart nicht, weil du eine using-Direktive vergessen hast?

Noch eine Anmerkung zu deiner Terminologie: "Thread einer Instanz" gibt es nicht, auch kann man keine "Instanz als Thread laufen lassen". Was man machen kann ist, eine Methode in einem Thread ausführen zu lassen, in diesem Fall die Methode UDPTransmitter.startTransmit(). ;)
 
Zurück
Oben