【问题标题】:How to a wait untill delegate evente done?如何等待委托事件完成?
【发布时间】:2019-10-11 20:39:02
【问题描述】:

如何等待委托方法完成

  await webBrowser1.DocumentCompleted += delegate
            {

                //finished 
            }; 

        //when finished do some things 

那该怎么做呢

谢谢

【问题讨论】:

  • 那行代码不会执行DocumentCompleted。它将委托注册为事件DocumentCompleted 的事件处理程序。
  • 正如@John 所说,您的活动不会运行,它只是一个注册。
  • 该代码在 UI 线程上运行,您不能等待。尝试等待会导致死锁,无法触发 DocumentCompleted 事件。只需将这行代码之后的任何代码移动到事件处理程序中即可。

标签: c#


【解决方案1】:

我个人建议您使用我认为可以满足您需求的解决方案。

WebBrowser 类:

class WebBrowser
{
    public event EventHandler DocumentCompleted;
    public async Task RaiseEvent(object o,EventArgs e )
    {
         DocumentCompleted(o, e);
    }
}

您如何举办活动:

WebBrowser w = new WebBrowser();

w.DocumentCompleted += delegate (object o, EventArgs e)
{
   var result = " hello event ";
};
//this part invoke all the delegates or method registered to this event .
await w.RaiseEvent(this, New EventArgs());

【讨论】:

    【解决方案2】:

    您应该调用它。我相信在代理返回之前调用块。

    Invoke((webBrowser1.DocumentCompleted)delegate
    {
        //Your code here
    ); 
    
    //This will run after 'Your code here'
    

    【讨论】:

    • 不明智,该事件是由 WebBrowser 引发的。
    • 我不认为你的提议能回答问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    相关资源
    最近更新 更多