PIC*_*ain 2 c# event-handling winforms formclosing
我正在研究具有多种形式的C#应用程序.
当我打开其中一个表单时,我添加了一个这样的事件监听器:SomeClass.MotionCompleted += new EventHandler(HandlerMethod);.MotionCompleted事件是一个静态事件.
我注意到,在关闭此表单后,HandlerMethod仍会在事件发生时被调用,然后导致异常,因为它试图更新表单上不再存在的内容.
eventlistener如何存在并响应事件,即使表单不再存在?一旦调用了form.Close()或this.Close(),就不应该自动取消挂钩事件列表器,以便它们不再被调用?
这是静态事件的邪恶!:)你有一个托管泄漏.
覆盖表单的OnClosing并取消注册处理程序:
protected override void OnClosing(CancelEventArgs e) {
SomeClass.MotionCompleted -= new EventHandler(HandlerMethod);
}
Run Code Online (Sandbox Code Playgroud)