Я немного смущен тем, как эти двое влияют друг на друга, после прочтения документации здесь https://docs.microsoft.com/en-us/uwp/api/windows.storage.streams.datareader.
Если бы я использовал DetachStream и Dispose для писателя, не стал бы читатель нулевым? Я вижу это в программе проверки качества кодовой базы.
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();
}
Очевидно, в этом случае читатель всегда равен нулю?
Обновленный пост, все это окружено try / catch, и я удаляю его в блоке finally.
Если вы не знаете, что текст, который вы читаете, составляет ровно один байт на символ (например, это чистый ASCII), ваш код выйдет из строя. Прочитанные байты! = Кодовые единицы для чтения.
Итак, что вы делаете, это избавляетесь от читателя и устанавливаете для него значение null.
После этого вы делаете то же самое в блоке finally. блок finally всегда будет выполняться, даже если попытка не удалась и попала в блок catch. Так что нет необходимости иметь
reader.DetachStream();
reader = null;
В вашем блоке попытки. просто удалите его из блока try, и ваша программа проверки качества кодовой базы перестанет жаловаться.
писатель и читатель должны быть двумя разными объектами. могу я увидеть, где вы определяете писателя и читателя?