C # process.start () приостановить выполнение - НАЧИНАЮЩИЙ - PullRequest
0 голосов
/ 23 июня 2011

У меня есть приложение на C # формах, и на нем есть несколько кнопок. Я использовал Process.start для выполнения программы .exe (это происходит, как только программа запускается (onload ())). Теперь, что мне нужно сделать, это когда пользователь нажимает на определенную кнопку в форме, мне нужно приостановить выполнение файла .exe и, когда они нажимают на другую кнопку, мне нужно возобновить выполнение. Как мне это сделать?

Помощь приветствуется.

Ответы [ 3 ]

2 голосов
/ 23 июня 2011

С Процесс приостановки в 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);
      }
    }
0 голосов
/ 23 июня 2011

Посмотрите на эту статью , в которой рассказывается, как приостановить процесс.

Этот вопрос на SO также задайте то же, что вы хотите, имейтесмотреть.

0 голосов
/ 23 июня 2011

Попробуйте WaitForExit () для вашего процесса.

...