C# 在调用后删除事件处理程序或只调用一次

标签 c# events

_cefGlueBrowser.LoadEnd += (s, e) =>
{
    BeginInvoke(new Action(() =>
    {
         MyCefStringVisitor visitor = new MyCefStringVisitor(this, m_url);
         e.Browser.GetMainFrame().GetSource(visitor);
         loaded = true;
    }));
};

但问题是 Event Handler 被调用了很多次。例如,在每个 JS 重新加载之后。如何删除多个调用。如何只调用一次 LoadEnd 事件。

我试试

_cefGlueBrowser.LoadEnd -= delegate { };

但不工作。

我能做什么?我只想调用一次!

最佳答案

EventHandler handler = null;
obj.SomeEvent += handler = (s, e) => {
    obj.SomeEvent -= handler;
    // more stuff
};

这是有效的,因为它是我们捕获的变量(词法闭包),而不是变量在任何特定时间的值。

关于C# 在调用后删除事件处理程序或只调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20717654/

相关文章:

c# - 使用 Rx 为 webservice 调用创建一个轮询请求

javascript - 事件触发两次

c# - 使用 SomeEvent(arg) 和 SomeEvent.Invoke(arg) 引发事件的区别

JavaScript 事件检测

c# - 从空表 SQL 中获取最新的身份,例如 ID

c# - 我如何修复此 LINQ,以便它将一对 val 视为不同的值?

c# - session 变量并将它们保存到数据库

c# - 如何在事件处理程序中设置计时器?

javascript - jQuery - 当类被删除时

javascript - 如何使用拓扑图处理 Cytoscape.js Canvas 上的鼠标滚动和按键事件