2012-04-11 11 views
6

いくつかのカスタム.NETストリームをWINRTに移植します。言語はC#です。IAsyncOperationWithProgressの実装方法

IAsyncOperationWithProgressの実装例がありますか?メソッドReadAsync、Windows.Storage.StreamsからのWriteAsyncにはメソッドが必要です。カスタムWinRTストリームの実装も歓迎されています。

create_asyncを使用してCのサンプルがいくつか見つかりましたが、C#でこれを行うために探していますが、Metroフレームワークでcreate_asyncが見つかりません。 C#の場合、事前

+0

これらのメソッドは、実装を返します。実装する必要はありません。自分で実装する必要はありません。 –

+0

私は、ランダムなメモリファイルキャッシュストリームのように、カスタムストリームを移植したい。だから私はそれらの方法を自分で提供しなければならない。 –

答えて

-1

おかげで、あなたはthis //build talk on async programmingをチェックアウトする必要があります。

高水準のC++を使用している場合は、PPLで非同期操作を行う方法については、thisの記事を参照してください。

低レベルのC++から独自の非同期操作を実装する必要がある場合は、WRL::AsyncBaseクラスを参照する必要があります。

+0

ヒントのおかげで、言語はまだC#:o、ビデオは本当にいくつかの疑問をクリアした。私はこのヘルプで、AsyncOperationsの作成を担当するAsyncInfoFactoryヘルパークラスを見つけました。 –

+1

-1のことは申し訳ありませんが、IAsyncOperationWithProgressのコードサンプルを探している60分のビデオ全体を見ていましたが、58時に機能の簡単な説明は保存されませんでした。 –

3

IAsyncOperationWithProgressを使用して、プログラムでXAPファイルのインストールの進行状況を表示する例を次に示します。私はWin8開発には全く新しいので、完全に慣れているかどうかはわかりません。

進行状況をUIスレッドにマーシャリングするDispatcher.BeginInvokeに注意してください。希望する:

private async void InstallApp(string name, Uri uri) 
{ 
    try 
    { 
     StatusTextBlock.Text = "Installing app"; 
     var installTask = InstallationManager.AddPackageAsync(name, uri); 

     installTask.Progress = (installResult, progress) => Dispatcher.BeginInvoke(() => 
     { 
      StatusTextBlock.Text = "Progress: " + progress; 
     }); 

     var result = await installTask; 
     StatusTextBlock.Text = "Done: " + result.InstallState.ToString(); 
    } 
    catch (Exception ex) 
    { 
     StatusTextBlock.Text = "Failed to install: " + ex.Message; 
    } 
}