while (TOGGLE == false) {
if (Keyboard.IsKeyDown(Key.A)) { RESULT = RESULT + "A";}
if (Keyboard.IsKeyDown(Key.B)) { RESULT = RESULT + "B"; MessageBox.Show(RESULT); }
if (Keyboard.IsKeyDown(Key.C)) { RESULT = RESULT + "C"; MessageBox.Show(RESULT); }
}
好的,所以当我点击B或C键时,一切正常,它会将字添加到字符串变量RESULT中,但是当我点击A时,它会向RESULT字符串添加无限量的A' s。我做错了什么?
修改: 我知道我没有将TOGGLE设置为false。但这就是重点!我会更好地解释一下:这个应用程序将在后台运行。因此,当客户端在记事本中写入时,该程序将检测他按下的每个键并将其添加到RESULT字符串。我不希望这个while循环在按下一个键时立即停止。我希望它循环,直到客户端完成写入记事本(当我将TOGGLE设置为false时)。
答案 0 :(得分:0)
因为你在消息框出现时阻塞了循环,但是对于A,没有消息框可以防止ui线程在A键仍被按下时继续绕循环。
你需要
break;
在你追加你的字符串之后跳出循环,或者显示一个消息框,具体取决于你想要实现的目标。
答案 1 :(得分:0)
当您显示消息框时,它会停止while循环继续,因为对消息框的调用是阻止调用。这意味着在消息框关闭之前代码不会继续执行。
在您的示例中,当您按A时,未显示消息框,因此循环继续。要解决此问题,您必须将Toggle
设置为true。
while (TOGGLE == false)
{
if (Keyboard.IsKeyDown(Key.A))
{
RESULT = RESULT + "A";
TOGGLE = true;
}
if (Keyboard.IsKeyDown(Key.B))
{
RESULT = RESULT + "B";
MessageBox.Show(RESULT);
TOGGLE = true;
}
if (Keyboard.IsKeyDown(Key.C))
{
RESULT = RESULT + "C";
MessageBox.Show(RESULT);
TOGGLE = true;
}
}
答案 2 :(得分:0)
你的循环非常非常快。按下“A”键一秒意味着它将按下几千个循环周期。添加System.Threading.Thread.Sleep(100);
会使循环挂起一点。
也许这可以帮助你实现你想要的目标:
while (TOGGLE == false)
{
if (Keyboard.IsKeyDown(Key.A)) { RESULT = RESULT + "A"; System.Threading.Thread.Sleep(100); }
if (Keyboard.IsKeyDown(Key.B)) { RESULT = RESULT + "B"; MessageBox.Show(RESULT); }
if (Keyboard.IsKeyDown(Key.C)) { RESULT = RESULT + "C"; MessageBox.Show(RESULT); }
}
没有Thread.Sleep
的另一种解决方案DateTime lastAletter = DateTime.Now;
while (TOGGLE == false)
{
if (Keyboard.IsKeyDown(Key.A) && lastAletter.AddMilliseconds(100) < DateTime.Now) { RESULT = RESULT + "A"; lastAletter = DateTime.Now; }
if (Keyboard.IsKeyDown(Key.B)) { RESULT = RESULT + "B"; MessageBox.Show(RESULT); }
if (Keyboard.IsKeyDown(Key.C)) { RESULT = RESULT + "C"; MessageBox.Show(RESULT); }
}
使用KeyPress event
会更有效率并且记住while(true)
处理器处于饥饿状态
答案 3 :(得分:0)
我知道我没有将TOGGLE设置为false。但这就是重点!我会更好地解释一下:这个应用程序将在后台运行。因此,当客户端在记事本中写入时,该程序将检测他按下的每个键并将其添加到RESULT字符串。我不希望这个while循环在按下一个键时立即停止。我希望它循环,直到客户端完成写入记事本(当我将TOGGLE设置为false时)。