Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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# Windows应用程序-自定义事件被多次调用_C#_Winforms - Fatal编程技术网

C# Windows应用程序-自定义事件被多次调用

C# Windows应用程序-自定义事件被多次调用,c#,winforms,C#,Winforms,专家们 在单击按钮期间,我在Windows应用程序中遇到一个问题 我有两个文件A.cs和B.cs 在A.cs文件中,我有一个名为“加载”的按钮,当我单击该按钮时,我需要触发B.cs中的一个函数 为此,我编写了一个事件处理程序 通用文件: 公共委托void MyEventHandler(对象发送方、事件参数e、字符串TagId) A.cs文件: 公共活动MyEventHandler OnTagLoad 私有void btnLoad_单击(对象发送方,事件参数e) { if(OnTagLoad!=n

专家们

在单击按钮期间,我在Windows应用程序中遇到一个问题

我有两个文件A.cs和B.cs

在A.cs文件中,我有一个名为“加载”的按钮,当我单击该按钮时,我需要触发B.cs中的一个函数

为此,我编写了一个事件处理程序

通用文件:

公共委托void MyEventHandler(对象发送方、事件参数e、字符串TagId)

A.cs文件:

公共活动MyEventHandler OnTagLoad

私有void btnLoad_单击(对象发送方,事件参数e) { if(OnTagLoad!=null) { OnTagLoad(发送方、e、运行时数据); } }

B.cs文件:

HostForm.OnTagLoad+=新的MyEventHandler(HostForm_OnTagLoad)

私有void HostForm_OnTagLoad(对象发送方、事件参数e、字符串运行时数据) { //做一些功能 }

问题:

当我点击加载按钮时,事件会被触发两次,如果我再次点击按钮,同一事件会被调用三次,以此类推

每当我单击Load按钮时,事件应该只触发一次。我们如何在windows窗体中实现这一点

谢谢你的帮助。

听起来像

HostForm.OnTagLoad += new MyEventHandler(HostForm_OnTagLoad);
正在被多次调用。要么将其移动到类中只调用一次的位置,要么在再次添加处理程序之前将其删除,如下所示

HostForm.OnTagLoad -= new MyEventHandler(HostForm_OnTagLoad);
HostForm.OnTagLoad += new MyEventHandler(HostForm_OnTagLoad);

(我推荐第一种方法)

这种方法我已经试过了,但没有成功。你两种方法都试过了吗?如果是这样的话,那么会有比你在帖子中所展示的更多的东西导致这个问题。基本上,我在B.cs文件的构造函数中订阅了这个事件。这是问题的原因吗?在
HostForm.OnTagLoad+=new MyEventHandler(HostForm\u OnTagLoad)上放置一个断点行并查看它被命中的次数。我已经检查了调用堆栈,它只调用构造函数一次,但当它转到HostForm_OnTagLoad函数时,它会一次又一次地调用同一个函数。现在按F11键调试更多。请显示代码中调用或具有OnTagLoad的任何位置。