【问题标题】:DataWriter/DataReader RelationDataWriter/DataReader 关系
【发布时间】:2018-10-25 20:09:06
【问题描述】:

在阅读此处https://docs.microsoft.com/en-us/uwp/api/windows.storage.streams.datareader 的文档后,我对这两者如何相互影响感到有些困惑。

如果我要在 writer 上 DetachStream 和 Dispose,那么 reader 最终是否为 null?我在代码库质量检查器中看到了这一点。

writer = new DataWriter(_device.OutputStream);
writer.WriteString(command);
await writer.StoreAsync();
writer.DetachStream();

reader = new DataReader(_device.InputStream);
IAsyncOperation<uint> taskLoad = reader.LoadAsync(10000);
taskLoad.AsTask().Wait();

var bytesToRead = taskLoad.GetResults();
var response = reader.ReadString(bytesToRead);

reader.DetachStream();
reader = null;

异常处理..

if (writer != null) {
    writer.DetachStream();
    writer.Dispose();
}

if (reader != null) {
    reader.DetachStream();
    reader.Dispose();
}

在这种情况下,显然 reader 始终为 null?

【问题讨论】:

  • 写者和读者应该是两个不同的对象。我可以看看你在哪里定义作者和读者吗?
  • 更新了帖子,整个事情都被 try/catch 包围了,我在 finally 块中进行处理。
  • 除非您知道您正在阅读的文本是每个字符恰好一个字节(例如,它是纯 ASCII),否则您的代码将会崩溃。读取的字节数!= 要读取的代码单元数。

标签: c# uwp


【解决方案1】:

所以你正在做的是处置阅读器,并将其设置为空。

这样做之后,您在 finally 块中执行相同的操作。 finally 块将始终运行,即使尝试失败并进入 catch 块。 所以没必要有

reader.DetachStream();
reader = null;

在你的 try 块中。 只需将其从 try 块中删除,您的代码库质量检查器就会停止抱怨。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多