0

コントロールの onClick を実行する関数を動的に定義したループに入りました。

機能は次のとおりです。

   public static void TryOpenFile(string filename, EventHandler callback)
        {

                Process proc;
                proc = Process.Start(filename);

             if (callback != null)
                {
                    proc.EnableRaisingEvents = true;
                    proc.Exited += (a, b) =>
                        {
                            callback(a, b);
                        };
                }
}

その後:

for(int i = 0; i < numberOfControls; i++)
{

            controlImg.SetFileToOpen(file, 
                delegate
                {
                    //exited!
                });

}
4

2 に答える 2

3

ファイル名がすでに実行中のプロセスを指しているようです。MSDNのドキュメントによると:

戻り値

タイプ:System.Diagnostics.Process

プロセスリソースに関連付けられている新しいプロセスコンポーネント。プロセスリソースが開始されていない場合(たとえば、既存のプロセスが再利用されている場合)はnull 。

更新:ファイル名が不正なファイル名の場合、明らかに例外がスローされます。

于 2012-06-07T15:20:20.550 に答える
2

このProcess.Startの過負荷に関するドキュメントでは、何が起こっているかを説明しています(私の強調)。

このオーバーロードを使用して、ファイル名を指定してプロセスリソースを開始します。過負荷は、リソースを新しいプロセスコンポーネントに関連付けます。プロセスがすでに実行されている場合、追加のプロセスリソースは開始されません。代わりに、既存のプロセスリソースが再利用され、新しいプロセスコンポーネントは作成されません。このような場合、Startは、新しいProcessコンポーネントを返す代わりに、呼び出し元のプロシージャにnullを返します。

ShellExecuteを使用して、実行可能ファイルを実行するのではなく、関連付けを使用してファイルを開始している場合、新しいプロセスが開始されない場合があります。たとえば、filenameが(たとえば)「C:\ Test.xls」の場合、Excelが起動する可能性があります。ただし、Excelがすでに実行されている場合は、新しいプロセスを開始するのではなく、既存の実行中のインスタンスでファイルを開く可能性があります。その場合、の値はprocnullになります。

于 2012-06-07T15:20:27.883 に答える