Windows 应用程序 - 自定义事件被多次调用
Posted
技术标签:
【中文标题】Windows 应用程序 - 自定义事件被多次调用【英文标题】:Windows Application - Custom Event is getting called multiple times 【发布时间】:2013-07-29 08:35:31 【问题描述】:专家,
在单击按钮期间,我在 Windows 应用程序中遇到了一个问题。
我有两个文件 A.cs 和 B.cs
在 A.cs 文件中,我有一个名为“加载”的按钮,当我单击此按钮时,我需要在 B.cs 中触发一个函数。
为此,我编写了一个事件处理程序。
通用文件:
public delegate void MyEventHandler(object sender, EventArgs e, string TagId);
A.cs 文件:
公共事件 MyEventHandler OnTagLoad;
private void btnLoad_Click(object sender, EventArgs e) 如果(OnTagLoad!= null) OnTagLoad(sender, e, runTimeData);
B.cs 文件:
HostForm.OnTagLoad += new MyEventHandler(HostForm_OnTagLoad);
private void HostForm_OnTagLoad(object sender, EventArgs e, string runTimeData) //做一些功能
问题:
当我点击加载按钮时,事件被触发两次,如果我再次点击按钮,同样的事件被调用三次,依此类推......
每当我单击加载按钮时,事件应该只被触发一次。我们如何在 Windows 窗体中实现这一点。
感谢您的帮助。
【问题讨论】:
请显示代码中调用或具有 OnTagLoad 的任何位置。 【参考方案1】:听起来像
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_OnTagLoad);
行放一个断点,看看它被命中了多少次。
我已经检查了调用堆栈,它只调用了一次构造函数,但是当它转到 HostForm_OnTagLoad 函数时,它会一次又一次地调用相同的函数。现在按 F11 键进行更多调试。以上是关于Windows 应用程序 - 自定义事件被多次调用的主要内容,如果未能解决你的问题,请参考以下文章
自定义列表视图适配器 getView 方法被多次调用,并且顺序不一致