c# - 如何取消订阅此 lambda 事件?

标签 c# events lambda cefsharp

我正在尝试取消订阅此事件(针对 cefsharp 事件):

wbPrzegladarka.FrameLoadEnd += async (sender, args) =>
{
  //Wait for the Page to finish loading
  if (args.Frame.IsMain)
  {
    await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
   }
 };

在这种情况下,当页面再次加载时,不应再触发。我不确定如何处理 lambda。

编辑:

我试过这个:

EventHandler<FrameLoadEndEventArgs> handlerFrameLoadEnd = async (sender, args) =>
            {
                //Wait for the Page to finish loading
                if (args.Frame.IsMain)
                {
                    await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
                }
            };
            wbPrzegladarka.FrameLoadEnd += handlerFrameLoadEnd;

但由于某些原因,该事件根本没有触发。

编辑:

还尝试了 Neil 的 功能事件:

wbPrzegladarka.FrameLoadEnd += FrameLoad;
wbPrzegladarka.FrameLoadEnd -= FrameLoad;

void FrameLoad(object sender, EventArgs args)
{
    //Wait for the Page to finish loading
    if (args.Frame.IsMain)
    {
        args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');").Wait();
    }
}

但由于某些原因根本没有触发:/

最佳答案

将 lambda 表达式移动到单独的方法中,并在该方法中取消订阅。

//subscribe
wbPrzegladarka.FrameLoadEnd += FrameLoad;


public async void FrameLoad(object sender, FrameLoadEndEventArgs args)
{
    if (args.Frame.IsMain)
    {
        await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
        //Unsubscribe 
        wbPrzegladarka.FrameLoadEnd -= FrameLoad;
    }
}

关于c# - 如何取消订阅此 lambda 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55628198/

相关文章:

Java 8 Lambda 表达式

c++ - Lambda 表达式、共享指针和 this 的类型

c# - 在 C# 中用文本更新图像后从数据库加载图像时参数无效

c# - SOAP 消息传递需要 HTTP Content-Type header ,但未找到

python - 模型内的 Pyramid 事件

c# - 在 akka.net Actor 中安全地使用事件处理程序

c# - 如何克隆一个继承的对象?

c# - 在 Roslyn 中使用泛型生成有效类型名称的技术

iphone - UIControlEventTouchDragExit 仅触发 ~100 像素

java - 对于 Java 8 中的 with 方法调用