Benutzer mit den meisten Antworten
Timing Probleme Task ruft FileStream mehrfach auf

Frage
-
Hallo zusammen,
Sorry wenn der Titel etwas konfus ist, ich weiß aber leider nicht wie ich es besser umschreiben kann :|
ich habe ein kleines Programm geschrieben welches mir Paket vom COM Port ausließt.
Dazu hab ich einen eigenen Task erstellt:
C#-Code:
Task task = new Task(delegate
{
Com_Port_Read_Start(syncByte);
});
task.Start();
in dem Task such ich das syncByte und lese dann in einer Endlosschleife immer 12 Bytes. Das geht auch super.
Nun wollt ich die 12 Bytes vorherarbeiten und daraus einen String basteln welchen ich in eine Datei schreibe.
Dafür hab ich mir eine Funktion erstellt:
C#-Code:
// write Packet in next line of file
public static void WriteFile(string packet)
{
DateTime localDate = DateTime.Now;
using (FileStream File = new FileStream(FileName, FileMode.Append))
using (BinaryWriter writer = new BinaryWriter(File, Encoding.ASCII))
{
// Write Header
writer.Write(localDate.ToString() + " : " + packet);
writer.Write(Environment.NewLine);
}
}
Leider läuft dieses nicht perfekt rund ;) ich glaube es liegt daran das ich einen eigenen Task erstellt habe welcher diese Funktion aufruft ...
Gibt es eine Möglichkeit eine Datei beim Start des Programmes zu öffnen, bei jeden Durchlauf der schleife im neuen Task eine Zeile zu schreiben und beim beenden des Programms die Datei schließt.
bin dankbar für jeden Tipp,
VG Thomas
Antworten
-
ich habe gerade kein Beispiel an der Hand. Ich denke jedoch, dass das ganze nicht Thread sicher ist und deswegen schief läuft. Deine SchreibeTask Serielle Schnittstelle könnte zum Beispiel in eine Concurrent Queue of T schreiben und der Dateischreibedienst diese abfragen. Die genannten Klassen sind Threadsicher und erzeugen keine "komischen" Probleme.
Hope this helps.Viele Grüße
Thomas
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 20. März 2017 10:24
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 31. März 2017 09:41
Alle Antworten
-
ich habe gerade kein Beispiel an der Hand. Ich denke jedoch, dass das ganze nicht Thread sicher ist und deswegen schief läuft. Deine SchreibeTask Serielle Schnittstelle könnte zum Beispiel in eine Concurrent Queue of T schreiben und der Dateischreibedienst diese abfragen. Die genannten Klassen sind Threadsicher und erzeugen keine "komischen" Probleme.
Hope this helps.Viele Grüße
Thomas
- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Montag, 20. März 2017 10:24
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 31. März 2017 09:41