C# 使用eventhandler加载另一个表单

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

即使没有错误,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.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();
}