【问题标题】:How to manage multiple processes in c#c#如何管理多个进程
【发布时间】:2022-01-21 18:54:21
【问题描述】:

我有一个需要管理多个进程的控制台应用程序。通过管理,我的意思是如果一个进程退出,我想再次启动它。所以基本上我的主进程将一直运行并观察进程 1 或 2 是否退出,如果退出则重新启动它们。

使用以下代码,程序会立即退出,出现 0 个错误。

static void Main() {
    Task.Run(() => Process1());
    Task.Run(() => Process2());
}

private static void Process1() {
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = false;
    startInfo.UseShellExecute = false;
    startInfo.FileName = "a process 1 file path";
    startInfo.WindowStyle = ProcessWindowStyle.Minimized;
    try {
        using (Process exeProcess = Process.Start(startInfo)) {
            exeProcess.WaitForExit();
        }
        Process1();
    }
    catch (Exception ex) {
        Console.WriteLine(ex.Message);
    }
}

private static void Process2() {
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = false;
    startInfo.UseShellExecute = false;
    startInfo.FileName = "a process2 file path";
    startInfo.WindowStyle = ProcessWindowStyle.Minimized;
    try {
        using (Process exeProcess = Process.Start(startInfo)) {
            exeProcess.WaitForExit();
        }
        Process2();
    }
    catch (Exception ex) {
        Console.WriteLine(ex.Message);
    }
}

【问题讨论】:

  • 您发布的代码有什么问题?
  • @Theodor Zoulias 它只是立即退出主程序
  • 您可以使用 Windows 作业 pinvoke 并创建它们来执行此操作,example
  • @nna12 我觉得我应该能够像我在示例中那样做。我只是缺少一些基本的东西。
  • 为什么不直接用一些东西把你的 exe 包装成设备,然后让 windows 设备管理器监视它们并重新启动它们。如果您有要观看的 exe 的代码,请将它们升级为服务

标签: c# multithreading


【解决方案1】:

我能够通过删除递归调用、将每个管理任务的方法放入无限循环然后等待每个任务来解决这个问题:

static void Main() {
    var task1 = Task.Run(() => Process1());
    var task2 = Task.Run(() => Process2());
    Task.WaitAll(task1, task2);
}

【讨论】:

  • 同时等待两个任务可能更可取:Task.WaitAll(task1, task2);
  • @Theodor Zoulias 根据您的建议更新了代码。好多了
  • 不知道当它停止时如何重新启动一个进程。看起来它只是等到两者都停止然后退出
  • @Caius Jard 在 Process 方法中,我添加了无限循环 while(true)。因此,如果 waitforexit 完成,则循环重新开始
猜你喜欢
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多