C# クラス ライブラリから実行されるコマンド ライン実行可能ファイルがあります。非常にまれな状況で、実行可能ファイルに渡されたコマンド ライン データが原因で、実行可能ファイルがハングすることがあります。残念ながら、これにより、c# DLL を呼び出すアプリケーションがハングアップし、プロセスが終了するまで無期限に待機します。
コマンドラインexeが1秒以内に実行を終了しない場合、決して終了しません。私がやりたいのは、プロセスが開始された直後にタイマーを生成し、数秒以内に終了していない場合はプロセスを強制的に閉じることです。
ここで最善のアプローチは何ですか?このコマンド ライン プロセスは非常に反復的なタスクのボトルネックになるため、ソリューションはパフォーマンスへの影響を最小限に抑える必要があります。
編集: Threading.Timer ではなく System.Timer を使用する必要がある理由、またはその逆の理由はありますか?
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = workingDirectory;
startInfo.FileName = commandLineExe;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = strArguments;
// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
}
コマンド ライン アプリがハングする原因を突き止めようとする提案や、コマンド ライン機能をソース コードにリファクタリングする必要があるという提案は控えてください。私たちはその問題に積極的に取り組んでいますが、アプリケーションの安定性を第一に考える必要があります。