如何取消订阅此 lambda 事件?
How to unsubscribe this lambda event?
我正在尝试退订此活动(针对 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');");
}
};
在这种情况下,当页面再次加载时,不应再触发。我不确定如何处理 lambdas。
编辑:
我试过这个:
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/unsubscribe 以正常方式移入委托。
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;
}
}
我的最终解决方案是,当我在 class 字段中声明时:
EventHandler<FrameLoadEndEventArgs> handlerFrameLoadEnd;
退订在活动中:
handlerFrameLoadEnd = async (sender, args) =>
{
//Wait for the Page to finish loading
if (args.Frame.IsMain)
await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
wbPrzelgadarka.FrameLoadEnd -= handlerFrameLoadEnd;
};
还有活动结束后记得订阅哦:
wbPrzegladarka.FrameLoadEnd += handlerFrameLoadEnd;
我正在尝试退订此活动(针对 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');");
}
};
在这种情况下,当页面再次加载时,不应再触发。我不确定如何处理 lambdas。
编辑:
我试过这个:
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/unsubscribe 以正常方式移入委托。
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;
}
}
我的最终解决方案是,当我在 class 字段中声明时:
EventHandler<FrameLoadEndEventArgs> handlerFrameLoadEnd;
退订在活动中:
handlerFrameLoadEnd = async (sender, args) =>
{
//Wait for the Page to finish loading
if (args.Frame.IsMain)
await args.Frame.EvaluateScriptAsync("alert('MainFrame finished loading');");
wbPrzelgadarka.FrameLoadEnd -= handlerFrameLoadEnd;
};
还有活动结束后记得订阅哦:
wbPrzegladarka.FrameLoadEnd += handlerFrameLoadEnd;