【发布时间】:2016-10-24 19:05:18
【问题描述】:
我正在使用DataWriter and DataReader 接口。
这些类实现了 IDisposable 接口,因此我将它们包装在 using 关键字周围:
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" 在 using 语句中发生,该对象将被释放。现在,问题在于 UWP-DataReader 和 DataWriter:他们将如果对象被释放,则关闭底层流。为了防止这种情况我必须调用 datareader.DetachStream() 然后释放。
当我们稍后再次需要底层 InputStream/Outputstream 时,我们不能将 DataReader/DataWriter 与 using 语句一起使用。
这个结论是正确的还是有其他方法可以处理这种情况?
【问题讨论】:
标签: c# windows-runtime uwp datareader