如何使委托命令等待直到执行完成

时间:2017-07-12 05:52:31

标签: wpf asynchronous wait

我有一个Delegate命令,如下所示:

  public static DelegateCommand CreateCommand<TState, TTrigger>(this StateMachine<TState, TTrigger> stateMachine, TTrigger trigger, Action execute = null, Func<bool> canExecute = null)
    {
        if (canExecute == null)
        {
            canExecute = () => true;
        }

        if (execute == null)
        {
            execute = () => { };
        }

        return new DelegateCommand(
            executeMethod: async () =>
            {
                await Task.Run(() =>
                {
                    execute();
                });
                if (stateMachine.CanFire(trigger))
                {
                    stateMachine.Fire(trigger);
                }
            },
            canExecuteMethod: () => canExecute());
    }

下面的代码片段不应该被执行,直到“execute()”方法完成。

if (stateMachine.CanFire(trigger))
                {
                    stateMachine.Fire(trigger);
                }

目前我的应用程序以异步方式工作,所以在execute()完成之前它会转到下一行。我试过了

  

等待,但它没有等待。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

您可以使用ContinueWith方法。

await Task.Run(() =>
            {
                execute();
            }).ContinueWith(
            x =>
            {
                stateMachine.Fire(trigger);
            });