C#暂时取消分配事件处理程序以进行序列化?

C#暂时取消分配事件处理程序以进行序列化?,c#,events,event-handling,C#,Events,Event Handling,我有一个对象图,其中包含一个触发事件的对象 我想序列化这个图,但是我偶尔会将处理程序插入到属于不可序列化类的事件中,我也不想首先序列化那些不可序列化的对象 基本上,不可序列化的东西,如日历、报告、图表等。插入数据图,事件用于更新等。我想序列化我的数据图,但不是我的报告、日历等 当我尝试序列化我的数据图时,如果事件委托不是null,我会得到一个异常,因为处理类是不可序列化的。我有这些表单中的代码,当我关闭它们时,处理程序断开连接,因此只要我关闭了所有日历、报表等,我就可以保存数据图 合乎逻辑的解决

我有一个对象图,其中包含一个触发事件的对象

我想序列化这个图,但是我偶尔会将处理程序插入到属于不可序列化类的事件中,我也不想首先序列化那些不可序列化的对象

基本上,不可序列化的东西,如日历、报告、图表等。插入数据图,事件用于更新等。我想序列化我的数据图,但不是我的报告、日历等

当我尝试序列化我的数据图时,如果事件委托不是null,我会得到一个异常,因为处理类是不可序列化的。我有这些表单中的代码,当我关闭它们时,处理程序断开连接,因此只要我关闭了所有日历、报表等,我就可以保存数据图

合乎逻辑的解决方案似乎是:

  • 将临时变量设置为事件处理程序的当前状态,可以为null或其他
  • 将事件处理程序设置为null
  • 序列化我的数据图
  • 将事件处理程序设置回原来的状态
  • 但是,这不起作用,因为我得到一个编译时错误,告诉我我的事件只能存在于+=或的左侧-=


    如何在序列化过程中临时删除所有处理程序,然后将它们设置回原位?

    您可以尝试将
    [field:NonSerialized]
    应用到您的事件中?

    您更快了。我可以添加一个示例的链接:)