Поток данных WPD MTP висит на Release
Я столкнулся со странной проблемой при чтении данных с MTP-совместимого мобильного устройства с помощью API WPD (Windows Portable Devices) под Windows 8 (пока не пробовал другие версии Windows).
Симптом при звонке Release
на IStream
интерфейс, полученный через IPortableDeviceResources::GetStream
функция, иногда Release
звонок будет зависать и не перезвонить, пока устройство не отключится от ПК.
После некоторых экспериментов я обнаружил, что это никогда не происходит, пока все содержимое потока было прочитано. Но если поток был прочитан только частично (скажем, первые 256 Кбайт файла), это может произойти на первый взгляд случайным образом (хотя и довольно часто).
Это было воспроизведено на iPhone и мобильном телефоне с Windows Phone 8, поэтому оно не похоже на конкретное устройство.
Кто-нибудь сталкивался с такой проблемой раньше? И что более важно, знает ли кто-нибудь о способе его решения, кроме как всегда читать все содержимое потока?
Спасибо!
1 ответ
Я обнаружил, что зовет IPortableDeviceDataStream::Cancel
Метод, кажется, решает эту проблему.