2011-11-11 25 views
6

Praktykowałem API WinRT, ale napotkałem pewne problemy, potrzebuję twojej pomocy.DataContractSerializer w WinRT

Chcę spróbować DataContractSerializer i odniesienie do tej strony:

http://winrtstoragehelper.codeplex.com/

Kod:

myślę, że powinno być (bug?):

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

Ale najdziwniejsze jest to, że jeśli używam tylko:

Stream inStream = readStream.OpenRead()); 

i mijam ten strumień do:

DataContractSerializer.WriteObject 

API będzie przebijał zawsze.

Ale jeśli mogę użyć:

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

I zdać ten strumień do WriteObject to będzie działać dobrze.

Nie mam pojęcia, dlaczego ten symptom występuje tylko wtedy, gdy nie używam do transmisji strumienia Task.Run i await.

Czy ktoś może udzielić mi porady lub sugestii? Metoda


Ale

Stream InStream = readStream.OpenRead() nie być nazwany "asynchroniczny"

nie wiem dlaczego muszę utworzyć zadanie celowo, aby to zrobić.

Dzięki.

Odpowiedz

4

Odpowiedź jest w opisie projektu:

„ObjectStorageHelper to ogólna klasa, która ułatwia przechowywanie danych w aplikacjach WinRT jednocześnie zachowaniu ASYNC * zasady * Metro stylu aplikacje. "

Wszystkie operacje na plikach/IO w WinRT są z natury asynchroniczne, stąd potrzeba użycia metod, które są również asynchroniczne (w celu uzyskania dowolnego wyniku). Nowe słowo kluczowe "oczekuj" jest jednym ze sposobów osiągnięcia tego celu, chociaż można również jawnie przypisać funkcję wywołania zwrotnego, aby obsłużyć zakończenie operacji asynchronicznej.

Powiązane problemy