我想开始一个过程,但要在特定时间点停止它,然后如果满足所有条件,请重新开始该过程。
我可以看到how to pause/resume a thread这个问题的答案,但是在我的情况下我无法使用它。
如何在wpf中使用MVVM模式进行操作?
赞赏正确方向上的任何观点。
答案 0 :(得分:0)
如果要暂停进程而不是线程,则必须使用外部方法
要按名称获取进程,可以使用System.Diagnostic.Process程序集
Process[] localByName = Process.GetProcessesByName("process");
杀死进程:
CurrentProcess.Kill();
暂停过程:
[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);
[DllImport("kernel32", CharSet = CharSet.Auto,SetLastError = true)]
static extern bool CloseHandle(IntPtr handle);
private static void SuspendProcess(int pid)
{
var process = Process.GetProcessById(pid);
if (process.ProcessName == string.Empty)
return;
foreach (ProcessThread pT in process.Threads)
{
IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id);
if (pOpenThread == IntPtr.Zero)
continue;
SuspendThread(pOpenThread);
CloseHandle(pOpenThread);
}
}
PS: 您是否要使用上次会话的数据重新启动该过程?