Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 需要创建一个事件处理程序,在事件发生时可以删除自身_C#_Wpf_Design Patterns_Event Handling - Fatal编程技术网

C# 需要创建一个事件处理程序,在事件发生时可以删除自身

C# 需要创建一个事件处理程序,在事件发生时可以删除自身,c#,wpf,design-patterns,event-handling,C#,Wpf,Design Patterns,Event Handling,我真的不知道如何做到这一点,因为我还从来没有需要这种模式。我正在寻找在单独的类中创建事件处理程序的正确模式,该类可以在包含事件的对象执行时删除自身 基本上,我想创建一个发生在WPF窗口上的EventHandler。关闭事件。并且,在处理程序的执行过程中,它将自己从窗口.Close事件中移除。我希望这足够具体,可以继续下去 另外,这个模式有一个特定的名称吗?需要以下工作吗 public void EventHandlerSubscription_Invoked(object sender, Eve

我真的不知道如何做到这一点,因为我还从来没有需要这种模式。我正在寻找在单独的类中创建事件处理程序的正确模式,该类可以在包含事件的对象执行时删除自身

基本上,我想创建一个发生在WPF
窗口上的
EventHandler
。关闭
事件。并且,在处理程序的执行过程中,它将自己从
窗口.Close
事件中移除。我希望这足够具体,可以继续下去


另外,这个模式有一个特定的名称吗?

需要以下工作吗

public void EventHandlerSubscription_Invoked(object sender, EventArgs args)
{
    _objectContainingEvent.MyEventHandler -= EventHandlerSubscription;
}

很抱歉,如果这不合理,我正在从头开始打字。

尝试执行类似“下一步”的操作:

 RoutedEventHandler handlerLoad = null;
 handlerLoad = delegate
        {
            //Do something
            Window.Close -= handlerLoad;
        };

Window.Close += handlerLoad;

请详细说明您项目的“内容”:您打算做什么。
也许您会对手动重置事件感兴趣,它只会触发 一次,除非重置它们:

这看起来很合理,但ReSharper抱怨说“有权访问Mofied Close”。我想我可以忽略这一点,因为我是故意这么做的。。。另外,我想首先将局部变量声明为null会有所帮助,这样它就可以在委托内部重用。我认为这个解决方案依赖于系统以注册事件处理程序的相同顺序执行事件处理程序。这是一个实现细节,微软不保证,因此我不会依赖它。为什么它必须从窗口中删除自己。关闭?事件处理程序是以表单形式注入的还是本地存在的?如果本地函数侦听该事件,则当窗体实例超出范围时,它将自动取消挂钩。该事件在单独的类中生成,而不是在窗口本身中生成。