2011-11-11 71 views
6

我在練習WinRT API,但遇到一些問題需要您的幫助。WinRT中的DataContractSerializer

我想嘗試DataContractSerializer,並引用此網站:

http://winrtstoragehelper.codeplex.com/

代碼:

我覺得應該是(錯誤):

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

但最奇怪的是,如果我只使用:

Stream inStream = readStream.OpenRead()); 

,我通過這個流進:

DataContractSerializer.WriteObject 

的API將永遠困。

但是,如果使用:

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

該物流通入WriteObject那麼它會正常工作。

我不知道爲什麼這種症狀只發生,如果我不使用Task.Runawait的流。

任何人都可以給我一些建議或建議嗎?


流inStream = readStream.OpenRead()方法並沒有被命名爲「異步」

我不知道爲什麼我要故意創建任務來完成。

謝謝。

回答

4

答案是在項目描述:

「ObjectStorageHelper是簡化的WinRT應用 數據的存儲,同時還保持異步 * 原則的Metro風格*通用類應用。」

WinRT中的所有文件/ IO操作本質上是異步的,因此需要使用也是異步的方法(爲了得到任何結果,至少)。新的「await」關鍵字是完成此操作的一種方法,但您也可以明確指定一個回調函數來處理異步操作的完成。