c# WinForms:一个比预期多执行的函数

本文关键字:执行 函数 一个 WinForms | 更新日期: 2023-09-27 18:08:03

这听起来很蠢,但我就遇到过这种事。

我激活一个函数,它做它的工作,在它完成后,它再次启用自己。换句话说,这个函数激活了两次,而不是一次。我试图通过调试找出原因,但我没有找到原因。

当我点击面板时,这个功能激活:

private void Play(object sender, EventArgs e)
{
    Play0(MousePositionX, MousePositionY);
    if (swich_player == true && AI_enabled == true)
    {
        AI_playing();
        swich_player = false;
    }
}

整个代码真的很长。

是我没有正确搜索吗?还有其他原因吗?为了让这个功能重新启动,必须有东西激活它。我找不到是什么在激活这个功能。

有什么建议,在哪里搜索问题?或者问题是什么?

编辑:

我终于找到问题了。有一个按钮(button1)改变面板的属性,第二个按钮(button2)使面板宽0像素,高0像素(为了使它不可见)。第一个按钮还添加了一个EventHandler来激活该函数。但是button2不会移除eventandler。这样,函数被调用的次数就和我按下button1的次数一样多。

c# WinForms:一个比预期多执行的函数

看起来您正在寻找的(通过您的注释/编辑)是对该函数的多次调用的源。对于当前的代码片段,我们无法判断。但是你应该做的是在函数的入口上放置一个断点,然后当它被击中时,看看visual studio中的"调用堆栈"窗口。

可以通过Debug -> Windows -> Call Stack菜单项(在运行程序时)访问。如果你不运行,它将不会显示在Windows中

你可以看到是什么在通过这个窗口调用你的函数。这是一个非常有用的工具。

前编辑:你的问题不是很清楚,但我认为(从你的变量名称),你正在寻找一个游戏循环,将持续运行。如果是的话,你可以看看这篇关于不同类型游戏循环的博文。它的范围从简单到更复杂(和可扩展)的循环。

你的问题指出,你激活某物一次,它"再次启用",而且"为了使这个功能再次启动,必须有东西激活它。"我找不到什么。"这些似乎是相互矛盾的陈述。你能把你的问题修改得更清楚一点吗?如果我的答案不是您编辑后想要的,我会尽我所能添加必要的内容。

检查针对哪个事件注册了此函数。如果你注册到一个没有OnClick按钮的东西,这可能是根本原因