2016-09-01 1 views
1

私は遠隔操作されるアプリケーションを持っています。終了時に、クライアントは要求に応じてアニメーションを再生し、クライアントに応答する必要があります。これは私が今持っている(と、それが正しくない作品)コードです:ナンシールート - コールバックの戻り値

public void PlayAnimation(Action callback) 
{ 
    DoubleAnimation fadeOut = new DoubleAnimation 
    { 
     //settings 
    }; 
    fadeOut.Completed += (s, e) => callback(); 
    BeginAnimation(OpacityProperty, fadeOut); 
} 


Get["/playAnim/{id}"] = param => 
{ 
    MainWindow.PlayAnimation(() => {/* Need to call "return" statement here */}); 
    return "Ok"; // This is where the value is returned now. 
    //The execution gets here before animation was completed. 
}; 

私が知っている、ナンシーもasync-await構文をサポートしていますが、DoubleAnimationない(またはそれがありません?)。だから、の後にアニメーションを再生した後に、ナンシーがの後に反応させる方法は?

答えて

1

あなた自身が言ったように、Nancyは非同期メソッドをサポートしているので、ここではTaskCompletionSourceを使用できます。コードの2番目の部分は次のようになります。

Get["/playAnim/{id}"] = async param => 
{ 
    var completionSource = new TaskCompletionSource<bool>(); 
    MainWindow.PlayAnimation(() => { completionSource.SetResult(true); }); 

    await completionSource.Task; 

    return "Ok"; 
};