C# 当我松开按钮时,如何使While循环退出/中断?
这里有什么问题?为什么while循环需要芬兰语才能获得keyup事件,即使我已经发布了它 我知道这只是暂时的,因为如果我只使用文本框,在我释放按钮之前,keyIsDown不会改变值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
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