Ich verwende die DataWriter and DataReader Schnittstellen innerhalb einer using-Anweisung (IDisposable) geschieht. Diese Klassen haben die IDisposable-Schnittstelle implementiert, ich sie deshalb wickeln rund um die using
Stichwort:.Handle Ausnahme, die
using(var datareader = new DataReader(SerialPortInputStream))
{
CancellationTokenSource cancellation = new CancellationTokenSource();
//Timeout
cancellation.CancelAfter(1000);
//...
datareader.LoadAsync(120).AsTask(cancellation.Token);
//Some fancy methods
...
//Last step: Detach the InputStream to use it again
datareader.DetachStream();
}
Dieser Thread here sagt, dass, wenn eine Ausnahme (hier ein "TaskCancelledException"
innerhalb einer using-Anweisung geschieht, wird das Objekt angeordnet ist jetzt ist das Problem mit dem UWP- DataReader
und DataWriter
: Sie werden den zugrunde liegenden Stream schließen, wenn das Objekt angeordnet wird, um zu verhindern, dass ich anrufen datareader.DetachStream haben() und dann entsorgen
Wir nicht verwenden können.. DataReader/DataWriter mit einer using
Anweisung, wenn wir den zugrunde liegenden InputStream/Outputstream später erneut benötigen. Ist diese Schlussfolgerung richtig oder gibt es andere Möglichkeiten, mit dieser Situation zu umgehen?
(In Bezug auf Ihre Anmerkung :) Ich habe es auf die harte Tour gelernt. Besonders wenn Sie den Stream erneut verwenden müssen: "Plötzlich" wird der Garbage Collector den Stream schließen und Ihre andere Methode "zerstören": Egal was passiert, rufen Sie immer 'DetachStream()' auf. – FikLi