异步调用事件或如何使用async等待事件执行完成 - 等待

时间:2017-08-18 13:19:52

标签: c# winforms events asynchronous async-await

我调用了一个事件,想要检查某个用户是否正在使用该组件。如果有人正在使用该组件,那么我将锁定该组件,以便其他人无法在编辑模式下打开它。 我的代码如下所示: -

   public event EventHandler<LockingEvent> Locking; //Some Event
   private async void _e41View_QueryLocking(object sender, E41LockingEventArgs e)
    {
        if ()
        {
            //await Something goes Here - Calling WCf service           
        }
        else if ()
        {
            //await Something goes Here - Calling WCf service           
        }
        else
        {
            e.Cancel = true;
        }
    }

现在在事件中我正在调用一些服务,所以我使用了await关键字。 现在,一旦编译器遇到await关键字,它就跳出该方法并开始执行其余的Calling方法。

//Calling Method
internal bool QueryEditing()
{
   //Event args value assigned here - 1
   Locking(this, args); //Invoked the Event - 2
   var retval = !args.Cancel; //Should be returned by the event -3
   return retval;
}

现在由于这个事件中使用了await关键字,我没有得到&#34; args.cancel&#34;的更新值。只有在整个事件被执行后才会出现,所以我们需要等待那个特定的时间段。

现在我知道我可以使用.Result而不是等待。 但我想知道我们可以做些什么来等待Invoked事件执行,然后执行其余的代码。

如果是,请提供一些解释。

0 个答案:

没有答案