DataContractSerializer в WinRT - PullRequest
       23

DataContractSerializer в WinRT

6 голосов
/ 11 ноября 2011

Я практиковал WinRT API, но столкнулся с некоторыми проблемами, нуждающимися в вашей помощи.

Я хочу попробовать DataContractSerializer и ссылаться на этот сайт:

http://winrtstoragehelper.codeplex.com/

Код:

Stream inStream = Task.Run(() => readStream.OpenRead()).Result;

Я думаю, что это должно быть (ошибка?):

Stream inStream = await Task.Run(() => readStream.OpenRead());

Но самое странное, что если я использую только:

Stream inStream = readStream.OpenRead());

и я передаю этот поток в:

DataContractSerializer.WriteObject

API будет зависать навсегда.

Но если я использую:

Stream inStream = await Task.Run(() => readStream.OpenRead());

И пропустите этот потокв WriteObject, тогда он будет работать нормально.

Я понятия не имею, почему этот симптом возник, только если я не использую Task.Run и await для потока.

Можеткто-нибудь дает мне какой-нибудь совет или предложение?


Но

Stream inStream = readStream.OpenRead () метод не был назван "async"

Я нене знаю, зачем мне нужно создавать Task специально для этого.

Спасибо.

1 Ответ

4 голосов
/ 14 ноября 2011

Ответ находится в описании проекта:

"ObjectStorageHelper - это универсальный класс, который упрощает хранение данных в приложениях WinRT, в то же время поддерживая асинхронные * принципы* приложений в стиле Metro. "

Все операции File / IO в WinRT по своей природе асинхронны, поэтому необходимо использовать методы, которые также являются асинхронными (чтобы получить какой-либо результат,по крайней мере).Новое ключевое слово «await» - один из способов сделать это, хотя вы также можете явно назначить функцию обратного вызова для обработки завершения асинхронной операции.

...