首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#进程管理

C#进程管理
EN

Stack Overflow用户
提问于 2013-03-22 18:54:18
回答 4查看 2.5K关注 0票数 0

我们正在尝试实现一个启动进程的程序。但同时最多可以有2个进程在内存中运行。如果进程数大于2,我们会因为许可策略而得到异常。所以基本上我们需要等到两个进程结束,然后再启动另一个进程,直到我们完成。我尝试检查内存中是否有2个或更多的进程,然后使线程休眠,但它似乎不能很好地工作

代码语言:javascript
复制
while (Process.GetProcesses().Where(x => x.ProcessName == "myProcessName").Count() >= 2)
{
 Thread.Sleep(100);
}
//Start next process

有什么想法吗?非常感谢!

EN

回答 4

Stack Overflow用户

发布于 2013-03-22 18:56:23

您似乎需要SemaPhore来确保atmax 2进程同时运行

票数 2
EN

Stack Overflow用户

发布于 2013-03-22 19:02:29

您可以启动进程并等待Exited事件重新启动另一个进程,如下所示:

代码语言:javascript
复制
using System;
using System.Diagnostics;

namespace ConsoleApplication1 {
    class Program {
        static void StartProcess(string Path) {
            Process Process = Process.Start(Path);
            Process.EnableRaisingEvents = true;
            Process.Exited += (sender, e) => {
                StartProcess(Path);
            };
        }

        static void Main(string[] args) {
            for (int i = 0; i < 2; i++) {
                StartProcess("notepad");
            }
            Console.ReadLine();
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2013-03-22 19:36:23

这将考虑已经运行的进程,并且如果之前运行的进程全部退出,则也只启动新进程。

代码语言:javascript
复制
string processName = "calc";
int processCount = 2;

while ( true )
  {
  while ( Process.GetProcessesByName( processName ).Count() < processCount )
    {
    Process.Start( processName );
    }

  var tasks = from p in Process.GetProcessesByName( processName )
              select Task.Factory.StartNew( p.WaitForExit );
  Task.WaitAll( tasks.ToArray() ); 
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15568548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档