C# 当我松开按钮时,如何使While循环退出/中断?

C# 当我松开按钮时,如何使While循环退出/中断?,c#,while-loop,C#,While Loop,这里有什么问题?为什么while循环需要芬兰语才能获得keyup事件,即使我已经发布了它 我知道这只是暂时的,因为如果我只使用文本框,在我释放按钮之前,keyIsDown不会改变值 void KeyDown(对象发送方,KeyEventArgs e) { keyIsDown=true; 如果(例如KeyCode.ToString()=“F6”) { while(keyIsDown) { //做点什么 睡眠(100); 如果(!keyIsDown) 打破 //做点什么 睡眠(100); 如果(!k

这里有什么问题?为什么while循环需要芬兰语才能获得keyup事件,即使我已经发布了它

我知道这只是暂时的,因为如果我只使用文本框,在我释放按钮之前,keyIsDown不会改变值

void KeyDown(对象发送方,KeyEventArgs e)
{
keyIsDown=true;
如果(例如KeyCode.ToString()=“F6”)
{
while(keyIsDown)
{
//做点什么
睡眠(100);
如果(!keyIsDown)
打破
//做点什么
睡眠(100);
如果(!keyIsDown)
打破
//做点什么
睡眠(100);
如果(!keyIsDown)
打破
//做点什么
睡眠(100);
如果(!keyIsDown)
打破
打破
}           
}
e、 已处理=错误;
}
void KeyUp(对象发送方,KeyEventArgs e)
{
keyIsDown=false;
e、 已处理=正确;
}

因为,当您的
KeyDown
方法在循环中运行时,其他方法无法运行。也就是说,
KeyUp
永远不会运行,您会被卡住

在Windows窗体(winforms)应用程序中,事件不会因另一个事件而中断。第二个事件处理程序(
KeyUp
)必须等待第一个事件处理程序终止

不清楚您想要实现什么,因为您的代码除了等待之外什么都不做

如果要制作某种动画,可以在“关键点向下”(key down)时启动计时器(无任何循环),然后在计时器的每个滴答声处制作动画,最后在“关键点向上”(key up)时停止动画

例如:

public partial class Form1 : Form
{
    private readonly Timer _timer = new Timer();
    private readonly string[] _messages =
        { "hello", "world", "", "folks", "we", "made", "it", "" };
    private int _index;

    public Form1()
    {
        InitializeComponent();

        _timer.Interval = 500; // Milliseconds
        _timer.Tick += Timer_Tick;
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        label1.Text = _messages[_index];
        _index = (_index + 1) % _messages.Length;
    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.F6) {
            _timer.Start();
        }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        _timer.Stop();
        label1.Text = "stopped";
        _index = 0;
    }
}

请注意,应用程序总是在等待事件发生。然后它处理事件并再次等待。我们说winforms应用程序是事件驱动的。

。我想用定时器就可以了。但是,假设我有我想写“你好”前50毫秒。然后,世界,第二个99毫秒。。对于每99毫秒,它不是相同的文本,每滴答都是不同的文本。然后你必须存储当前状态,这样你就可以在下一个计时器滴答时继续。我改变了这个例子。状态由
\u索引
表示。此代码在按F6时循环消息。谢谢!我想我明白了。。我们将于明天对此进行调查D