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 应用程序 - 自定义事件被多次调用的主要内容,如果未能解决你的问题,请参考以下文章

H2用户自定义函数被多次调用

自定义列表视图适配器 getView 方法被多次调用,并且顺序不一致

多次调用自定义 UITableViewCell initWithStyle

C#做(不)调用事件[关闭]

RxJava 作为事件总线被多次调用,即使只触发一次

多次调用 Spring 安全自定义过滤器