我试着用process.exited事件来侦听,但是失败了,失败原因如下:
http://topic.csdn.net/u/20080827/15/f6b8a287-baf8-49f8-aee4-525657f0c4dc.html

解决方案 »

  1.   

    可以采用加载到dataset里面,保存的话也可以利用dataset直接存
    不需要打开文件进行操作
      

  2.   

    我是举了个例子,这个xml是需要通过外部程序打开的,而且非常庞大,把它加到dataset里不合算。
      

  3.   

    Exited事件应该是可以作到的,你只要给相应的xml文件指定相关联的打开程序即可.
      

  4.   

    我指定的infopath打开xml,的的确确不行啊。
      

  5.   

    看看这个是不是你需要的?C# 启动外部程序的几种方法: 1. 启动外部程序,不等待其退出。 
    2. 启动外部程序,等待其退出。 
    3. 启动外部程序,无限等待其退出。 
    4. 启动外部程序,通过事件监视其退出。 复制  保存
    // using System.Diagnostics;
    private string appName = "calc.exe";
    /// <summary>
    /// 1. 启动外部程序,不等待其退出
    /// </summary>
    private void button1_Click(object sender, EventArgs e)
    {
    Process.Start(appName);
    MessageBox.Show(String.Format("外部程序 {0} 启动完成!", this.appName), this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    /// <summary>
    /// 2. 启动外部程序,等待其退出
    /// </summary>
    private void button2_Click(object sender, EventArgs e)
    {
    try
    {
    Process proc = Process.Start(appName);
    if (proc != null)
    {
    proc.WaitForExit(3000);
    if (proc.HasExited)
    MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Information);
    else
    {
    // 如果外部程序没有结束运行则强行终止之。
                    proc.Kill();
    MessageBox.Show(String.Format("外部程序 {0} 被强行终止!", this.appName), this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
    }
    }
    catch (ArgumentException ex)
    {
    MessageBox.Show(ex.Message, this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    }
    /// <summary>
    /// 3. 启动外部程序,无限等待其退出
    /// </summary>
    private void button3_Click(object sender, EventArgs e)
    {
    try
    {
    Process proc = Process.Start(appName);
    if (proc != null)
    {
    proc.WaitForExit();
    MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
    }
    catch (ArgumentException ex)
    {
    MessageBox.Show(ex.Message, this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    }
    /// <summary>
    /// 4. 启动外部程序,通过事件监视其退出
    /// </summary>
    private void button4_Click(object sender, EventArgs e)
    {
    try
    {
    // 启动外部程序
            Process proc = Process.Start(appName);
    if (proc != null)
    {
    // 监视进程退出
                proc.EnableRaisingEvents = true;
    // 指定退出事件方法
                proc.Exited += new EventHandler(proc_Exited);
    }
    }
    catch (ArgumentException ex)
    {
    MessageBox.Show(ex.Message, this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
    }
    /// <summary>
    /// 启动外部程序退出事件
    /// </summary>
    void proc_Exited(object sender, EventArgs e)
    {
    MessageBox.Show(String.Format("外部程序 {0} 已经退出!", this.appName), this.Text,
    MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
      

  6.   

    一开始是想用刷新按钮,后来想到用process.exited事件后,觉得这是最好的解决方案,可是没曾想就是不支持xml。好痛苦啊!
      

  7.   

     Dim p As ProcessPrivate Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    p = New Process
    p.StartInfo.FileName = "NotePad.exe"
    p.EnableRaisingEvents = True '启用事件
    p.SynchronizingObject = Me '指定同步对象
    AddHandler p.Exited, AddressOf Me.tExited
    p.Start()End Sub
    Private Sub tExited(ByVal sender As Object, ByVal e As EventArgs)
    MsgBox("已经结束!")
    ' p.Close()
    End Sub