C# 让一个进程以定时间隔运行另一个进程
跟我呆一会儿: 进程A是我的主要工作进程。当它运行时,它处理信息。它可能需要30秒到20分钟的时间来完成。在这一过程中有多种变化,而且并不完全稳定。如果它崩溃了,也没什么大不了的,因为它可以在下次运行时从停止的地方开始 流程B只是我的启动流程。我希望它以给定的间隔运行进程A(比如每5分钟一次)。如果进程A已经在运行,那么进程B应该等到下一个时间间隔再尝试。即C# 让一个进程以定时间隔运行另一个进程,c#,C#,跟我呆一会儿: 进程A是我的主要工作进程。当它运行时,它处理信息。它可能需要30秒到20分钟的时间来完成。在这一过程中有多种变化,而且并不完全稳定。如果它崩溃了,也没什么大不了的,因为它可以在下次运行时从停止的地方开始 流程B只是我的启动流程。我希望它以给定的间隔运行进程A(比如每5分钟一次)。如果进程A已经在运行,那么进程B应该等到下一个时间间隔再尝试。即 if(!ProcessA.isRunning) ProcessA.Run(); else Wait Until Next
if(!ProcessA.isRunning)
ProcessA.Run();
else
Wait Until Next Interval to try
进程A或多或少是编写的。我认为它将是它自己的.exe,而不是使用多线程来实现这一点
我的问题是:如何编写运行单独的.exe的进程B,并将其挂钩,以便检查它是否正在运行 已经完成了所有这一切因此使用GetProcessByName:
// Get all instances of Notepad running on the local
// computer.
Process [] localByName = Process.GetProcessesByName("notepad");
如果在localByName中获取任何内容,则进程仍在运行
看看这门课
使用这个类,您可以检索关于系统中进程的所有类型的信息。而且,如果您自己启动该进程,则不必扫描所有进程,因此可以防止缓慢且容易出错的调用
当您有一个流程对象时,可以使用WaitForExit
等待它完成
您可以做的是:
var startOtherProcess = true;
while (startOtherProcess) {
var watchedProcess = Process.Start("MyProgram.Exe");
watchedProcess.WaitForExit();
if (testIfProcessingFinished) {
startOtherProcess = false;
}
}
以下是以下代码的工作原理: 它检查指定的进程是否运行,如果是,它将忽略,否则它将运行您需要的。对于间隔,使用
System.Timers.Timer
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
public void RunProcess()
{
bool createdNew = true;
using (Mutex mutex = new Mutex(true, "MyApplicationName", out createdNew))
{
if (createdNew)
{
// Here you should start another process
// if it's an *.exe, use System.Diagnostics.Process.Start("myExePath.exe");
}
else
{
Process current = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcessesByName(current.ProcessName))
{
if (process.Id != current.Id)
{
SetForegroundWindow(process.MainWindowHandle);
break;
}
}
}
}
}
只希望没有其他人有一个名为“记事本”的进程。