Entwickler-Ecke

Sonstiges (.NET) - Threads und Streams


mannyk - Di 25.05.10 13:42
Titel: Threads und Streams
Hallo,

ich habe einen Thread, der gewisse Berechnungen in einer Endlosschleife durchführt.
Nun möchte ich, dass nach jeder Berechnung das Ergebnis abgefragt werden kann.
Kann ich dies mit Streams machen oder gibt es eine bessere Möglichkeit?


Kha - Di 25.05.10 14:28

Ich glaube, du hast eine etwas falsche Vorstellung von Streams :gruebel: .

Bezieht sich "abgefragt" auf die GUI? Dann schau dir einmal den BackgroundWorker an, der übernimmt bereits die Synchronisierung zwischen UI- und Nebenthread. Oder gleich Control.Invoke, was auch nicht umständlicher ist, aber man sollte schon einmal etwas von Delegates gehört haben.


mannyk - Di 25.05.10 15:26

Hallo,

nein, es geht nicht um eine GUI.

Es gibt einfach einen Thread, der immer läuft und der bestimmte Werte generiert. Diese generierten Werte möchte ich mit einem anderen Programm lesen. Also braucht der Thread irgendeine Kommunikationsanbindung.

Ich habe dies jetzt mit StringWriter/StringReader und einem StringBuilder realisiert. Keine Ahung ob das elegant ist, aber funktionieren tut es :)

Lg


Kha - Di 25.05.10 16:36

Also keine Threads, sondern Prozesse...

Wenn du "professionellere" Varianten als über eine Textdatei suchst (wie informierst du dort das andere Programm, dass neue Daten verfügbar sind?), solltest du unter dem Stichwort IPC [http://stackoverflow.com/questions/84855/what-is-the-best-choice-for-net-inter-process-communication] fündig werden.


mannyk - Di 25.05.10 21:51

Nein, nein. Es handelt sich ganz sicher um Threads. ^^

Ich habe den einen Thread als BackgroundWorker implementiert. Und der Worker soll eben eine Connection zu demjenigen Thread haben, der diesen gestartet hat.
Ich nehme an, dass sich "ReportProgress()" dafür auch eignen könnte. Ich fand es dennoch nicht so elegant, da mein Thread ja immer läuft und keinen prozentmäßigen Fortschritt übermittelt.

Lg


Kha - Mi 26.05.10 00:37

user profile iconmannyk hat folgendes geschrieben Zum zitierten Posting springen:
Nein, nein. Es handelt sich ganz sicher um Threads. ^^
Aha. Und warum schreibst du dann
user profile iconmannyk hat folgendes geschrieben:
606688)][...]möchte ich mit einem anderen Programm lesen.
:?:

user profile iconmannyk hat folgendes geschrieben Zum zitierten Posting springen:
nein, es geht nicht um eine GUI.
Wofür ist dann der zweite Thread zuständig?


mannyk - Mi 26.05.10 13:58

Sorry, das mit dem "Programm" war doch sehr missverständlich.

Der 1. Thread ist der eigentliche Einstiegspunkt, sprich die die Main-Methode.
Der 2. Thread ist derjenige Thread, den ich explizit instanziere und welcher die Berechnungen ausführt.


Kha - Mi 26.05.10 14:13

user profile iconmannyk hat folgendes geschrieben Zum zitierten Posting springen:
Der 1. Thread ist der eigentliche Einstiegspunkt, sprich die die Main-Methode.
Und, wofür ist er zuständig? Wenn es keine GUI ist, was dann, eine Konsole? Warum muss das Ergebnis von diesem Thread aus abgefragt werden?

Wie die Synchronisierung erfolgen muss, hängt letztendlich ganz von deinen Daten ab. Aber ab .NET 4 könnten dir Klassen wie BlockingCollection, die für solche Producer-Consumer-Szenarien bestimmt sind, sicher weiterhelfen.