C# 使用eventhandler加载另一个表单
即使没有错误,Form3也没有加载。。知道为什么吗?我认为,正如运行中的评论所指出的,这确实是一个线程问题。在创建Form3之前调用UI线程。检查并调用C# 使用eventhandler加载另一个表单,c#,.net,winforms,thread-safety,C#,.net,Winforms,Thread Safety,即使没有错误,Form3也没有加载。。知道为什么吗?我认为,正如运行中的评论所指出的,这确实是一个线程问题。在创建Form3之前调用UI线程。检查并调用 private void button1_Click(object sender, EventArgs e) { Process p1 = new Process(); p1.StartInfo.FileName = @"D:\Softwares\ftrScanApiEx_v3.2\ftrScanApiEx_v3
private void button1_Click(object sender, EventArgs e)
{
Process p1 = new Process();
p1.StartInfo.FileName
= @"D:\Softwares\ftrScanApiEx_v3.2\ftrScanApiEx_v3.2\ftrScanApiEx.exe";
p1.EnableRaisingEvents = true;
p1.Exited += new EventHandler(p1_Exited);
p1.Start();
}
private void p1_Exited(object sender, EventArgs e)
{
Form3 f3 = new Form3();
f3.Show();
this.Hide();
}
进程真的存在吗?我猜它可能与线程有关。无法保证p1_Exited会在GUI线程上被调用(很可能不会)。尝试在该事件中使用invoke调用Hide和Show方法。@NathanA你说得对,但这应该会引发
invalidoOperationException
,不是吗?我猜进程不会在退出all@SriramSakthivel是的,我查过了。。它的exiting@Legend退出的事件是否已被激发?
private void p1_Exited(object sender, EventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new Action(OnProcessExited));
}
else
{
OnProcessExited();
}
}
private void OnProcessExited()
{
Form3 f3 = new Form3();
f3.Show();
this.Hide();
}