C#WinForms:执行超出预期的函数

时间:2011-09-08 13:16:46

标签: c# winforms visual-studio debugging

这听起来很愚蠢,但这种情况发生在我身上。

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

当我点击面板时,此功能会激活:

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不会删除EventHandler。这样,函数被调用的次数与我按下button1的时间一样多。

2 个答案:

答案 0 :(得分:1)

看起来你正在寻找的东西(通过你的评论/编辑)是多次调用此函数的来源。使用当前的代码片段,我们无法分辨。但是你应该做的是在函数的入口处放置一个断点,然后当它被命中时,查看visual studio中的“调用堆栈”窗口。

这可以通过Debug - >访问。 Windows - >调用堆栈菜单项(运行程序时。如果您没有运行,它将不会显示在Windows中)

然后,您可以通过此窗口查看正在调用您的功能的内容。这是一个非常有用的工具。

预编辑: 你的问题不是很清楚,但我认为(从你的变量名称)你正在寻找一个将继续运行的游戏循环。如果是这样,请查看this blog post,其中包含有关不同风格游戏循环的非常好的信息。它的范围从简单到更复杂(和可扩展)的循环。

你的问题表明你曾经激活一次并且“再次启用”,并且“为了让这个功能重新开始,必须要激活它。我找不到什么”。这些似乎是矛盾的陈述。你能编辑一下你的问题吗?如果我的答案不是您在编辑后所寻找的答案,我将尽我所能添加任何需要的内容。

答案 1 :(得分:0)

检查您注册此功能的事件。如果您注册了该按钮没有“OnClick”的内容,则可能是根本原因