c# -内存中的事件处理程序



我在c# . net应用程序中遇到了一个挑战,我不知道如何解决。我有一个对象,它有一个名为Load的方法。如果对象加载成功,则触发一个事件。如果对象加载失败,则触发另一个事件。该实体定义如下:

public class MyEntity
{
  public event EventHandler Load_Succeeded;
  public event EventHandler Load_Failed;
  public void Load()
  {
    /*
     Asynchronously load the entity code here.
    */
  }
  private void Load_Completed(IAsyncResult result)
  {
    // Fire Load_Succeeded or Load_Failed
  }
}

现在,如果Load失败,我将对象存储在隔离存储中,以便稍后尝试加载它。当我稍后尝试加载对象时,我有以下代码:

MyEntity myEntity = GetFromIsolatedStorage();
myEntity.Load_Failed -= new EventHandler(myEntity_Load_Failed);
myEntity.Load_Failed += new EventHandler(myEntity_Load_Failed);
myEntity.Load_Succeeded -= new EventHandler(myEntity_Load_Succeeded);
myEntity.Load_Succeeded += new EventHandler(myEntity_Load_Succeeded);
myEntity.Load();

奇怪的是,当我通过从隔离存储加载的实体运行Load代码时,原始的Load_Failed和Load_Succeeded事件处理程序被执行。尽管我用的是"-="我做错了什么?我如何清除对象上的所有事件处理程序,以便我可以基本上重置它们?

谢谢!

只能在定义事件的对象上删除eventandler。这意味着你可以这样写:

    public class MyEntity
{
  public event EventHandler Load_Succeeded;
  public event EventHandler Load_Failed;
  public void Load()
  {
    /*
     Asynchronously load the entity code here.
    */
  }
  private void Load_Completed(IAsyncResult result)
  {
    // Fire Load_Succeeded or Load_Failed
  }
  public void ResetEvents()
  {
        this.Load_Succeeded = null;
        this.Load_Failed = null;
  }
}

然后调用

myEntity.ResetEvents();

让我们按照以下方式编写代码,这是相同的代码,但更清晰:

<>之前MyEntity = GetFromIsolatedStorage();myEntity。Load_Failed -= new eventandler (this.myEntity_Load_Failed);myEntity。Load_Failed += new eventandler (this.myEntity_Load_Failed);之前

-=操作符删除事件订阅,如果事件已经包含相同的订阅者:this.myEntity_Load_Failed。我不知道您的程序结构,但我认为本例中的事件有另一个订阅者(不是"this"),这一行没有任何影响。您需要将退订操作-=移到已知订阅者的位置

相关内容

  • 没有找到相关文章

最新更新