ループなしで待機できます。「プロセス」の API には、必要なタスクを実行するための他のオプションがあります。
var procStartInfo = new ProcessStartInfo(@"cmd", "/c " + @"ping 127.0.0.1 -n 10")
{
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true
};
var proc = new Process { StartInfo = procStartInfo };
result = await Task<string>.Factory.StartNew(() =>
{
proc.Start();
proc.WaitForExit();
return proc.StandardOutput.ReadToEnd();
}, TaskCreationOptions.PreferFairness);
コードは .NET 4.5 用であるため、UI は待機中に応答性を維持します。必要に応じて、.NET 4.0 を使用して単純な呼び出しで同じことを行うことができます。プロセスの実行を待機させるコード行は次のとおりです。この例では、シェル コマンドを使用して実行しています。ただし、任意の実行可能プロセスを呼び出すことができます。
と
「別のプロセスが使用しています」というエラーが発生しないように、「読み取り専用モード」でファイルを監視するサンプル
this.fileFullPath = filePath + @"\" + fileName;
this.fileSystemWatcher = new FileSystemWatcher(filePath);
this.fileSystemWatcher.Filter = fileName;
this.fileSystemWatcher.NotifyFilter = NotifyFilters.FileName;
this.fileSystemWatcher.Created += new FileSystemEventHandler(FileSystemWatcherCreated);
this.fileSystemWatcher.Changed += new FileSystemEventHandler(FileSystemWatcherChanged);
////this.fileSystemWatcher.Error += new ErrorEventHandler(FileSystemWatcherError);
////this.fileSystemWatcher.Renamed += new RenamedEventHandler(FileSystemWatcherRenamed);
////this.fileSystemWatcher.Deleted += new FileSystemEventHandler(FileSystemWatcherDeleted);
this.fileSystemWatcher.EnableRaisingEvents = true;
最後の行「EnableRaisingEvents」はイベント通知を実現し、「NotifyFilter」はディレクトリまたはファイルのさまざまな属性と動作を監視するのに役立ちます。
それが役立つことを願っています