2011-11-11 9 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はまだは、Metroスタイルの非同期 * 原則 *を維持しながら、WinRTのアプリケーションで データの保存を簡素化するジェネリッククラスです。アプリ "

WinRTのすべてのファイル/ IO操作は本質的に非同期であるため、非同期のメソッドを使用する必要があります(結果を得るには少なくとも)。新しい "await"キーワードはこれを達成する方法の1つですが、非同期操作の完了を処理するためのコールバック関数を明示的に割り当てることもできます。