一个主窗体中新开了一个进程,
Code
codeProcess p = new Process();//建立外部调用进程
p.StartInfo.FileName = XXXX;//要调用外部程序的绝对路径
p.StartInfo.Arguments = "XXXXXXXXXXXXXXXXXXXXXX";//参数
p.StartInfo.UseShellExecute = false;//
p.StartInfo.RedirectStandardError = true;//
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = false;//不创建进程窗口
p.ErrorDataReceived += new DataReceivedEventHandler(Output);//
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived);
p.Start();//启动
p.BeginOutputReadLine();
p.BeginErrorReadLine();//开始异步读取
p.WaitForExit();//阻塞等待进程结束
p.Close();//关闭进程
p.Dispose();//释放资源
void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
if (!String.IsNullOrEmpty(e.Data))
{
//处理方法
a = e.Data.ToString();
//this.label1.Invoke(new Setlbl(SetLabel));
}
}
private void Output(object sendProcess, DataReceivedEventArgs output)
{
if (!String.IsNullOrEmpty(output.Data))
{
//处理方法
b = output.Data.ToString();
//this.label1.Invoke(new Setlbl(SetLabel));
}
}
问题来了,就是当我在新进程中操作主窗体的控件,比如label的时候,就会提示错误,不了操作非本线程创建的控件,这是.NET的安全机制导致的,不能够跨进程进行操作。
然后我使用委托。。也不行,执行到this.label1.Invoke(new Setlbl(SetLabel));就死机了(应该死锁了)
那应该要怎么样才能够在新进程中操作主窗体的控件呢?