关于Application.run()的有关问题

关于Application.run()的问题
我现在有一个初始化界面FormA和一个主界面FormB,程序运行时我想先显示初始化界面FormA并调用一个外部"a.exe"程序,然后FormA自动关闭并显示主界面FormB。我尝试的方法类似如下:
            Application.Run(new FormA());
            System.Diagnostics.Process.Start("E:\\a.exe");  //调用外部程序
            Application.Exit();
            Application.Run(new FormB());
但是这个方法不行,FormA不会自动关闭,要手动叉掉窗口才会继续后面的语句,该怎么改?

另外c#调用a.exe程序的语句能执行,但是我试了网上说的关闭a.exe的语句却不行,代码如下:
private void btnExit_Click(object sender, EventArgs e)  //退出按钮的消息响应函数
{
            System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process myProcess in myProcesses)
            {
                if ("a.exe" == myProcess.ProcessName)
                    myProcess.Kill();
            }
            Application.Exit();
}
关闭a.exe的代码放在了这个按钮函数里,代码的位置有问题吗?为什么程序退出了而a.exe却没有能关掉?
------解决方案--------------------

            Application.Run(new FormA());
            System.Diagnostics.Process.Start("E:\\a.exe");  //调用外部程序
            Application.Exit();
            Application.Run(new FormB());

Application.Exit();之后,你这个项目生成的exe就退出了,没法再执行后面的FormB。可以把FormA隐藏掉。
------解决方案--------------------
var f = new FormA();
Application.Run(f);
            System.Diagnostics.Process.Start("E:\\a.exe");  //调用外部程序
new FormB().Show();
            f.Close();
------解决方案--------------------
如果FormA只是一个欢迎界面的作用,建议不要把它作为第一个启动窗口。。。
弄个计时器,多少秒后结束这个欢迎界面。或者真有数据在加载,就等数据加载完把这个欢迎窗口结束掉。

 Application.Run(new FormB());
            System.Diagnostics.Process.Start("E:\\a.exe");  //调用外部程序
            Application.Exit();



 private void FormB_Load(object sender, EventArgs e)
        {
            FormA fA= new FormA();
            fA.ShowDialog();
        }

这个时候只有A界面,在FormA里面弄个Timer吧,时间到了调用this.Close(); FormB就出来了,大概就这样了。。。
------解决方案--------------------
比如说,你在Form1进行处理之前想先显示Form2,然后当Form1处理之后再关闭Form2,那么你可以在Form1中定义一个事件通知,例如
public event Action OK;
然后在Form1的处理(例如在Form_Load中加载数据)完毕之后触发事件通知,例如
private void Form1_Load(object sender, EventArgs e)
{
    ...............
    if (OK != null)
        OK();
}


然后,进程启动时应该执行
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    var f2 = new Form2();
    f2.Show();
    ....................
    var f1 = new Form1();
    f1.OK += () => f2.Close(); 
    Application.Run(f1);
}

------解决方案--------------------
大致说一下逻辑:

首先,在Process.cs里,你应该这样写:
FormA  frm = new FormA();
if(frm.ShowDialog()==DialogResult.OK)
{
        Application.Run(new FormB());
}

然后在FormA的Load事件中,创建一个线程,然后在线程中去调用a.exe,当线程调用成功了,把窗口的DialogResult设为OK,并关闭FormA