C# 使用进程类vs cmd c运行进程时的奇怪行为#
我想通过c#运行Iperf 当通过cmd运行时,一切都运行良好且快速 但我使用以下代码通过c#运行它:C# 使用进程类vs cmd c运行进程时的奇怪行为#,c#,process,console-application,C#,Process,Console Application,我想通过c#运行Iperf 当通过cmd运行时,一切都运行良好且快速 但我使用以下代码通过c#运行它: public void RunProcess(string FileName, string Arguments, bool EventWhenExit ) { process = new Process(); process.EnableRaisingEvents = true; process.OutputDataReceived += new DataRecei
public void RunProcess(string FileName, string Arguments, bool EventWhenExit )
{
process = new Process();
process.EnableRaisingEvents = true;
process.OutputDataReceived += new DataReceivedEventHandler(OnDataReceivedEvent);
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.LoadUserProfile = false;
process.StartInfo.UseShellExecute = false;
process.StartInfo.FileName = FileName; // Gets or sets the application or document to start.
process.StartInfo.Arguments =Arguments;//Gets or sets the set of command-line arguments to use when starting the application
Thread.Sleep(1000);
if (EventWhenExit)
{
process.EnableRaisingEvents = true;
process.Exited += new EventHandler(myprocess_Exited);/*New line */
}
process.Start();
process.BeginOutputReadLine();
PID = process.Id;
}
private void myprocess_Exited(object sender, EventArgs e)
{
process.Refresh();
Thread.Sleep(2000);
onProcessEnd(this, "ENDOF " + Proc.ToString());
Console.WriteLine("Process exsiting ");
}
private void OnDataReceivedEvent(object sender, DataReceivedEventArgs e)
{
string OutputFromProcess = e.Data;
//fire event to event handler class for further use
onDataOutputFromProcess(this, OutputFromProcess, Proc.ToString());
}
我有错误的奇怪行为:
当运行1个流时(使用Iperf的人都知道…),每个流在控制台和我的应用程序中都可以正常工作(winform
)
但我运行3个以上的流,我的应用程序不会停止运行,而只是在应该退出时挂起
有什么问题吗?
解决这个问题的好办法是什么?首先,您应该避免不惜任何代价使用Thread.Sleep(x) 我假设您没有使用backgroundWorker或新线程来执行IPerf进程 我认为幕后工作人员会对你很好。看一看 此外: cmd程序在大多数情况下都是线性的 WinForm程序不是。您必须分别创建GUI和工作线程。
GUI仅用于输入和显示。您应该在另一个线程中执行的所有其他操作,因为否则您将阻止GUI。对于不起作用的代码,请创建一个,以便我们可以帮助您。我将处理:)同时,您可以告诉我,我在代码中设置进程的方式是否有问题吗?可能这里不清楚,对此我很抱歉,但实际上我完全按照你说的做了。我的GUI是独立的,线程是独立的。睡眠只是为了产生一个小的延迟(我把它记下来)你使用委托事件来报告输出吗?你对每个backroundworker都使用相同的事件吗?只是猜测,但是,如果两个backgroundworker同时调用事件,是否会导致全局变量出错?您是指OnDataOutputFromProcess事件?