Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将while循环与MouseEnter一起使用_C# - Fatal编程技术网

C# 将while循环与MouseEnter一起使用

C# 将while循环与MouseEnter一起使用,c#,C#,我在编程一个按钮时遇到了一些问题,当用户的光标在按钮上时,按钮会增加 我在图像上使用MouseEnter,它调用以下方法: private void add_Number(object sender, MouseEventArgs) { _isMouseOver = true; while(_isMouseOver) { i++; Console.WriteLine(i);

我在编程一个按钮时遇到了一些问题,当用户的光标在按钮上时,按钮会增加

我在图像上使用
MouseEnter
,它调用以下方法:

private void add_Number(object sender, MouseEventArgs)
{
        _isMouseOver = true;
        while(_isMouseOver)
        {
                i++;
                Console.WriteLine(i);
        }
}
我用作全局
\u isMouseOver
的变量只是一个初始化为
false
私有布尔值。另外,
i
只是一个全局变量,在函数中设置为0

为了从图像中添加另一个调用,我还使用了
MouseLeave
调用另一个方法
sub\u Number
,该方法减少变量
I
,并将
\u isMouseOver
设置为false

问题是,一旦我们进入
while
循环,我们就永远不会离开那里,即使有人将光标放在图像之外。当我将其放置在图像之外时,它应该调用方法
sub_Number
,以中断
的执行,同时
循环,因此,停止增加
I
以减少它

我需要做一些多重预测吗?它不是应该变得更复杂吗?
使用这些全局变量不好吗?

如果我理解您的目标,最简单的方法是使用计时器控件,在启动时设置为
Enabled=false
。在MouseEnter上,设置布尔值,但也要设置
Timer.Enabled=true
。在计时器的滴答声方法中,增量和输出i。可以在设计时设置间隔。最后,取消设置布尔值并在OnMouseExit中设置
Timer.Enabled=false


希望这有帮助。

while循环中的input Application.DoEvents()。我认为它会解决这个问题。似乎它使用了100%的CPU,我不确定这是否是增量的最佳做法。你可以使用多个计时器。所以我正在按照你说的做,看起来这是个好主意,但我有一个问题。当我使用
Timer.Tick
调用我的方法时,它表示方法Tick不在
System.Timers
包中。我不确定我是否理解。也许有必要研究一下如何在网上使用计时器,如果你陷入困境,也许可以问一个新问题。虽然没有真正回答我的问题,但确实帮助了我。这是你的一票。