代码之家  ›  专栏  ›  技术社区  ›  ebattulga

如何在c中清除事件句柄#

  •  1
  • ebattulga  · 技术社区  · 14 年前

    我正在使用名为“client”的全局变量

    例如

    client.getPagesCompleted += (s, ee) =>
    {
        pages = ee.Result;
        BuildPages(tvPages.Items, 0);
        wait.Close();
    };
    client.getPagesAsync(cat.MainCategoryID);
    

    我需要清理处理人员 getPagesCompleted
    如何轻松清理手柄?
    我知道 client.getPagesCompleted-=new EventHandler(...) . 但这是非常困难的。我需要简单的方法。 我在用 client.getPagesCompleted=null "only use += / -+"

    3 回复  |  直到 14 年前
        1
  •  6
  •   ChrisF toni    14 年前

    删除事件处理程序的唯一方法是使用 -= 使用与通过 += .

    如果需要添加和删除处理程序,则需要在命名方法中对其进行编码,而不是使用匿名方法/委托。

        2
  •  2
  •   Danko Durbić    14 年前

    您不必将事件处理程序放在单独的方法中;您仍然可以使用lambda函数,但需要将其赋给委托变量。比如:

    MyEventHandler handler = (s, ee) => 
    { 
        pages = ee.Result; 
        BuildPages(tvPages.Items, 0); 
        wait.Close(); 
    }; 
    
    client.getPagesCompleted += handler; // Add event handler
    // ...
    client.getPagesCompleted -= handler; // Remove event handler
    
        3
  •  0
  •   Pentium10    14 年前

    将事件对象保存到变量中,然后使用 -=