C# 如何在win应用程序中暂停执行并等待按键?
我正在使用c#实现一个调试器(在VS2012--.NET4.5上工作),它的工作原理如下:(这是一个使用msscript.ocx控件的vbscript调试器) 在具有断点的行上,它应该等待{F5}键,在具有{F5}键后,它应该移动到下一个代码行 现在的问题是,在调试方法中(在命中断点时调用此方法)继续在循环中移动,检查是否将静态变量设置为true(控件上的按键事件将此静态变量设置为true) 应用程序没有响应,我必须停止它 下面是它的代码: 以下代码在文本框的按键事件中实现: 每当它收到一个{F5}键时,它就会在一个静态变量中设置trueC# 如何在win应用程序中暂停执行并等待按键?,c#,debugging,vbscript,keypress,C#,Debugging,Vbscript,Keypress,我正在使用c#实现一个调试器(在VS2012--.NET4.5上工作),它的工作原理如下:(这是一个使用msscript.ocx控件的vbscript调试器) 在具有断点的行上,它应该等待{F5}键,在具有{F5}键后,它应该移动到下一个代码行 现在的问题是,在调试方法中(在命中断点时调用此方法)继续在循环中移动,检查是否将静态变量设置为true(控件上的按键事件将此静态变量设置为true) 应用程序没有响应,我必须停止它 下面是它的代码: 以下代码在文本框的按键事件中实现: 每当它收到一个{F
static bool dVar;
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;
}
}
现在,在到达断点时,调用以下函数
public void DebugIT()
{
dVar=false
//Waits for the {F5} key press by checking for the static variable
//The Application goes Un-Responsive on this Loop and stops accepting keys
while (dVar!=true)
{
System.Threading.Thread.Sleep(1000);
}
}
}
这里的问题是,当它进入while循环时,它停止接受按键并没有响应
需要一种暂停代码执行直到收到所需按键的方法
或
我们可以有一个单独的线程来检查{F5}键的按下,并且不会使应用程序失去响应
有人能帮忙吗?您需要将DoEvents添加到while循环中。参见中的示例这里是一个如何实现此目的的示例。
如果您想让这段代码正常工作,请创建一个新表单并在其上拖放两个按钮和一个文本框
public partial class Form1 : Form
{
ManualResetEvent man = new ManualResetEvent(false);
public Form1()
{
InitializeComponent();
button1.Click += button1_Click;
button2.Click += button2_Click;
}
private async void button1_Click(object sender, EventArgs e)
{
textBox1.Enabled = false;//Do some work before waiting
await WaitForF5(); //wait for a button click or a key press event or what ever you want
textBox1.Enabled = true; //Continue
}
private Task WaitForF5()
{
return Task.Factory.StartNew(() =>
{
man.WaitOne();
man.Reset();
}
);
}
private void button2_Click(object sender, EventArgs e)
{
man.Set();
}
}
在上面的示例中,当您单击按钮1时,文本框被禁用,当您按下第二个按钮时,文本框再次被启用。
这是在不阻塞UI的情况下完成的谢谢您的回复,但对我来说不起作用。添加DoEvents对我很有效,因为使用Async方法会移动该方法的控件调用方,但根据我的需要,它应该暂停执行。