【问题标题】:How to let a C# application finish after if has started a new process?如果启动新进程后如何让 C# 应用程序完成?
【发布时间】:2010-09-28 09:52:33
【问题描述】:

我有一个生成 .pdf 文件并使用 myProcess.start(pdfFileName); 打开它的应用程序.此调用在 Winfom 应用程序中的按钮上的单击事件的事件处理程序中调用。

一切正常,除了如果我在 Acrobat Reader 启动后退出(alt-f4 或使用右上角的十字)我的应用程序,我的应用程序不会停止:表单消失,但 VS 中的调试会话会不要停止,即使我已经退出 Acrobat Reader。如果我在 realese 中编译和/或从 windows 而不是从 VS 启动 exe,行为是相同的,然后我必须使用任务管理器终止该进程。

我在文档中找不到任何东西,但我知道这一定是一个非常常见的问题?

谢谢, 黄昏。

【问题讨论】:

    标签: .net process


    【解决方案1】:

    你需要挂钩ProcessExit event

    myProcess.StartInfo.FileName = fileName;
    myProcess.EnableRaisingEvents = true;
    myProcess.Exited += new EventHandler(myProcess_Exited);
    myProcess.Start();
    
    [...]
    
    private void myProcess_Exited(object sender, System.EventArgs e) {
      Application.Exit();
    }
    

    【讨论】:

    • 好的,谢谢。所以没有办法只启动一个不绑定到我的进程的进程。由于用户可能会启动打开未知数量的 pdf,我必须计算进程并使用事件处理程序才能知道它们何时全部终止,然后才能退出()?
    【解决方案2】:

    在应用关闭时运行的代码部分中,例如退出事件,您可以终止该进程。见http://msdn.microsoft.com/en-us/library/05abh773(v=vs.71).aspx

    【讨论】:

    • 我不想在我的应用程序退出时终止 Acrobat 进程 :)
    【解决方案3】:

    我刚刚用Acrobat reader测试过,应用程序正常退出。您必须让后台进程或线程在循环中运行。

    【讨论】:

    • 您似乎是对的:我创建了一个新的 WinForm 应用程序,只是在按钮上添加了它,并将此方法设置为单击的处理程序:private void button1_Click(object sender, EventArgs e) { 流程流程 = 新流程(); Process.Start(@"c:\a.pdf");这工作正常。所以也许问题来自 XSL:FO 转换器(nFop,java 端口)。如果我找到答案,我会尝试在那里挖掘并更新。谢谢你。
    【解决方案4】:
    theProcess.EnableRaisingEvents = true;
    theProcess.Exited +=  delegate(object sender, System.EventArgs e)
                                        { Application.Exit();  }
    theProcess.Start();
    

    【讨论】:

      猜你喜欢
      • 2021-06-01
      • 2019-03-08
      • 1970-01-01
      • 2023-03-10
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多