小编Mat*_*rez的帖子

删除 C# 中的事件处理程序

我正在开发一个 Windows 窗体应用程序,但我已经无法理解发生了什么。

我有类似 MVC 架构的东西。有时我希望属于视图的控件停止监听事件。因此,在视图代码中,我编写了一个如下所示的方法:

public void enableEventHandlers(bool enable)
{
    if (enable)
    {
        control.someEvent += someEventHandler;
    }
    else
    {
        control.someEvent -= someEventHandler;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:当我想删除事件处理程序时,我只需使用 false 作为参数来调用此方法。如果我从视图代码内部调用此方法,它就可以正常工作。但是,如果我从控制器代码内部调用此方法,它将不起作用(事件处理程序不会被删除)。

只是为了提供更多背景信息:

这有效:

public partial class View : Form
{
     public void enableEventHandlers(bool enable)
     {
         // The code I already showed
     }

     public void doSomething()
     {
         enableEventHandlers(false);
         // do something
         enableEventHandlers(true);
     }
 }
Run Code Online (Sandbox Code Playgroud)

这不起作用:

public class controller
{
     private View myView;

     public void doSomething()
     {
         myView.enableEventHandlers(false);
         // Do something... but somehow everything inside …
Run Code Online (Sandbox Code Playgroud)

c# events

5
推荐指数
1
解决办法
419
查看次数

标签 统计

c# ×1

events ×1