我正在使用c#实现调试器,它应该如下工作: (这是一个使用msscript.ocx控件的vbscript调试器)
在带断点的行上它应该等待{F5}键,并且在有{F5}键时它应该移动到下一个代码行。
现在的问题是在调试方法中(在命中断点时调用此方法) 继续在循环中移动检查静态变量设置为true(控件上的按键事件将此静态变量设置为true)。
应用程序没有响应,我必须停止它。
以下是代码:
为控件编写以下代码以接受控件上的{F5}键(说出文本框控件)
private void fctb_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.F5)
{
//Setting the static variable true when the control recieves a {F5} key
dVar = true;
}
}
在命中断点之后运行的另一个方法在继续之前检查dVar值: 它如下所示:
while (!dVar)
{
System.Threading.Thread.Sleep(100);
}
这里的问题是,当它进入while循环时,它会停止接受按键并且没有响应。
需要一种暂停代码执行的方法,直到收到所需的按键时为止。
或
我们是否可以有一个单独的线程来检查{F5}键按下并且不会使应用程序无响应。
有人可以帮忙吗?
答案 0 :(得分:1)
问题和答案真的很难理解。
首先,使用F10
作为步骤键,这在当今非常标准。
要按键上的程序锁定,您可以使用以下内容:
while (Console.ReadKey().Key != ConsoleKey.F11);
这很好,因为它不会循环。 ReadKey()
方法暂停执行,直到实际按下某个键。所以这里没有浪费CPU资源。
编辑:带有静态变量的窗体
在评论中,您发布了以下代码:
private void fctb_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.F5)
{
dVar = true;
}
}
您现在需要做的就是在处理事件后立即重置其他方法/线程上的值:
// some code...
while (!dVar)
{
System.Threading.Thread.Sleep(100); // don't ever loop without throttling CPU down
}
dVar = false; // event handled
// some code...