C#process.start()暂停执行 - BEGINNER

时间:2011-06-23 06:16:06

标签: c# process exe

我有一个C#表单应用程序,它上面有几个按钮。我已经使用Process.start来执行一个.exe程序(一旦程序启动(onload())就会出现这种情况)。现在我需要做的是,当用户点击表单上的特定按钮时,我需要暂停执行.exe文件,当他们点击另一个按钮时我需要恢复执行。我该怎么做?

帮助表示感谢。

3 个答案:

答案 0 :(得分:2)

来自Suspend Process in C#

 [Flags]
    public enum ThreadAccess : int
    {
      TERMINATE = (0x0001),
      SUSPEND_RESUME = (0x0002),
      GET_CONTEXT = (0x0008),
      SET_CONTEXT = (0x0010),
      SET_INFORMATION = (0x0020),
      QUERY_INFORMATION = (0x0040),
      SET_THREAD_TOKEN = (0x0080),
      IMPERSONATE = (0x0100),
      DIRECT_IMPERSONATION = (0x0200)
    }

    [DllImport("kernel32.dll")]
    static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId);
    [DllImport("kernel32.dll")]
    static extern uint SuspendThread(IntPtr hThread);
    [DllImport("kernel32.dll")]
    static extern int ResumeThread(IntPtr hThread);



    private void SuspendProcess(int PID)
    {
      Process proc = Process.GetProcessById(PID);

      if (proc.ProcessName == string.Empty)
        return;

      foreach (ProcessThread pT in proc.Threads)
      {
        IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id);

        if (pOpenThread == IntPtr.Zero)
        {
          break;
        }

        SuspendThread(pOpenThread);
      }
    }

    public void ResumeProcess(int PID)
    {
      Process proc = Process.GetProcessById(PID);

      if (proc.ProcessName == string.Empty)
        return;

      foreach (ProcessThread pT in proc.Threads)
      {
        IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id);

        if (pOpenThread == IntPtr.Zero)
        {
          break;
        }

        ResumeThread(pOpenThread);
      }
    }

答案 1 :(得分:0)

在您的流程上尝试WaitForExit()。

答案 2 :(得分:0)

看看这个article它告诉你如何暂停一个进程。这个question在SO上也要求你想要的东西,看一下。