C#等待用户输入,然后继续输入代码
问题描述:
我只对C#语言有一个基本的了解,但我很困扰,我的程序使用Powershell来执行任务。C#等待用户输入,然后继续输入代码
我的具体问题是我无法附加另一个事件处理程序,它可以在用户点击一个按钮后监听按键,我会解释。
- 用户点击按钮
- 网络跟踪开始使用的powershell(用户控制何时停止跟踪)
- 我的临时解决方法是,以显示一个消息,当该闭合..
- 停止网络跟踪
是否有反正我可以代替我的消息框,用户可以按空间停止跟踪?
谢谢你的时间和事先帮助。
public void button3_Click(object sender, EventArgs e)
{
///////////
ps.AddScript("netsh trace start persistent=yes capture=yes tracefile=" + progpath + @"\nettrace.etl");
ps.Invoke();
MessageBox.Show("Press OK to stop the trace");
ps.AddScript("netsh trace stop");
/////////
}
答
答案由Andy Lanng在代码项目中提供; http://www.codeproject.com/Questions/892139/Csharp-Wait-for-user-input-then-continue-with-code
如果这是一个winforms应用程序(“MessageBox.Show”表示它是),那么触击空间将触发一个事件,具体取决于哪个控件具有焦点。 隐藏复制代码
private void form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == ' ')
ps.AddScript("netsh trace stop");
}
的问题是,你说,你不能接受新的事件。我想这是因为button3_Click事件继续运行一段时间,阻止其他事件。
我建议你看看线程和异步方法。这里的一种方式(不完全测试)
private PowerShell ps = new PowerShell { };
BackgroundWorker backgroundWorker = new BackgroundWorker();
public void button3_Click(object sender, EventArgs e)
{
backgroundWorker.DoWork +=backgroundWorker_DoWork;
backgroundWorker.RunWorkerAsync();
}
void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
ps.AddScript("netsh trace start persistent=yes capture=yes tracefile=" + progpath + @"\nettrace.etl");
ps.Invoke();
}
private void form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == ' ')
ps.AddScript("netsh trace stop");
}
你需要做一些修改此作为调整if语句以及其中PS声明等工作。
答
您可以将按钮作为切换吗?例如:
private static bool tracing = false;
public void button3_Click(object sender, EventArgs e)
{
if (tracing)
{
ps.AddScript("netsh trace stop");
button3.Text = "Begin trace";
ps.Invoke();
}
else
{
ps.AddScript("netsh trace start persistent=yes capture=yes tracefile=" +
progpath + @"\nettrace.etl");
button3.Text = "Stop trace";
}
tracing = !tracing;
}
嗨Rufus, 这当然是一种我没有考虑过的方法,确实做这项工作! 谢谢你的帮助:) – Matt416 2015-03-30 22:56:28
嗨,鲁弗斯,我没有标记你的答案。我想用我原来的计划去!抱歉。 – Matt416 2015-03-31 11:54:11
这是什么计划? – 2015-04-02 02:47:02