【问题标题】:Windows Application - Custom Event is getting called multiple timesWindows 应用程序 - 自定义事件被多次调用
【发布时间】: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 的任何位置。

标签: c# winforms


【解决方案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 键进行更多调试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多