私はDataWriter and DataReaderインターフェイスを使用しています。 これらのクラスはIDisposableをインターフェイスが実装されてい、ので、私はusing
キーワードの周りにそれらをラップ:。ハンドルusingステートメント内で発生する例外(IDisposable)
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();
}
このスレッドhere(ここで"TaskCancelledException"
を使用して文の内部で発生した例外場合、オブジェクトは今すぐに配置されることを言っています、問題はUWP- DataReader
とDataWriter
である:彼らは、オブジェクトが配置されます場合、私はdatareader.DetachStreamを(呼び出すためにしたことを防ぐために基本となるストリームを閉じて)してから処分します
我々が使用することはできません。のDataReader/DataWriterは、基本となるInputStream/Outputstreamが後で必要になるときの文です。 この結論は正しいのですか、それともこのような状況を処理する他の方法がありますか?
(ご注意:私はそれを難しい方法で学びました。特にストリームをもう一度使用する必要があるときは、「突然」ガベージコレクタがストリームを閉じ、他のメソッドを「破棄」します。何が起きても常にDetachStream()を呼び出します。 – FikLi