0

プロセスを開始するプログラムを実装しようとしています。ただし、同時に最大 2 つのプロセスをメモリ内で実行できます。プロセス数が 2 を超える場合、ライセンス ポリシーにより例外が発生します。したがって、基本的には、2 つのプロセスが終了するまで待ってから、完了するまで別の 2 つのプロセスを開始する必要があります。メモリ内に2つ以上のプロセスがあるかどうかを確認してからスレッドをスリープさせようとしましたが、うまく機能していないようです

while (Process.GetProcesses().Where(x => x.ProcessName == "myProcessName").Count() >= 2)
{
 Thread.Sleep(100);
}
//Start next process

何か案は?どうもありがとう!

4

4 に答える 4

2

一度に atmax 2 プロセスが実行されるようにするには、 SemaPhoreが必要なようです

于 2013-03-22T10:56:22.833 に答える
1

Exited次のように、プロセスを開始し、イベントが別のプロセスを再開するのを待つことができます。

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();
        }
    }
}
于 2013-03-22T11:02:29.440 に答える
0

これは、すでに実行中のプロセスを考慮し、以前に実行中のプロセスがすべて終了した場合にのみ、新しいプロセスを開始します。

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() ); 
  }
于 2013-03-22T11:36:22.633 に答える
0

一時的な解決策が見つかりました:

while (true)
  {
    lock (_lock)
    {
      if (Process.GetProcesses().Where(x => x.ProcessName == "processName").Count() < GetProcessNumber)
      {
        //do Smth
        break;
      }
      Thread.Sleep(1000);
    }
  }
于 2013-03-22T13:38:35.040 に答える