0

ここに問題があります.....

ProcessStartInfoのリストを次のように持っていますList<ProcessStartInfo>

Seriesieでプロセスを開始したい

最初のプロセスを開始した場合、リストの2番目のプロセスは、最初のプロセス(終了または中止)のときにのみ開始する必要があります。

私はそれを次のように試します.....

    private void startSeriesExecution()
    {
        List<string> programpath = new List<string>();
        programpath.Add(@"C:\Program Files\Internet Explorer\iexplore.exe");
        programpath.Add(@"C:\Program Files\Microsoft Office\Office12\WINWORD.EXE");

        foreach (var VARIABLE in programpath)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo
                                             {
                                                 FileName = VARIABLE,
                                                 Arguments =
                                                     "www.google.com"
                                             };

            try
            {
                using (Process process=Process.Start(startInfo))
                {
                    if (process.WaitForExit(Int32.MaxValue))
                    {
                        continue;
                    }
                }
            }
            catch (Exception)
            {
                continue;
            }
        }
    }

マルチスレッド用のカスタムクラスを使用して実行startSeriesExecutionしているので、すべてのプロセスが同時に実行されます。

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        // This function starts the Execution in different thread
        Start.Work(startSeriesExecution).OnComplete(onSeriesExecutionComplete).Run();
    }

また、私が観察したもう1つのこと...

1つのプロセスがすでに実行されている場合...IEがすでに実行されており、実行されたstartSeriesExecution()とします。この場合、すでに実行されているプロセス(IE)が開始されます...その後、forループ全体が実行されます...つまり、リスト内のすべてのプロセス実行されます...

どうすればいいのかわからなくなった…。

4

1 に答える 1

0

そのコードは機能するように見えます。WaitForExitは、完了するまでそのスレッドを一時停止します。

また、これらのプロセスが多くの情報を出力する場合は、追加する必要があります

process.ErrorDataReceived += new DataReceivedEventHandler(process_ErrorDataReceived);
process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);

これは関係なく良い考えです。さもないと、出力フィールドとエラーフィールドがクリアされるまでプロセスがハングする可能性があり、これは決して起こらない可能性があります。

プロセスにイベントを追加すると、イベントが出力され続けるため、いわば詰まることはありません。

アップデート:

プロセスがすでに実行されているかどうかを確認したい場合は、次の方法でこれを行うことができます:stackoverflow.com/a/51149/540339

次に、そのプロセスが終了するまで、ループしてThread.Sleep(xxxx)を使用して待機する必要があります。

于 2011-12-05T05:55:23.523 に答える