您可以在没有循环的情况下进行等待。“流程”的 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 对简单调用执行相同操作。使进程执行等待的代码行是:proc.WaitForExit(); 在这个例子中,我使用 shell 命令来执行。但是您可以调用任何可执行进程。
和
以“只读模式”观看文件的示例,以便它不会给出“另一个进程正在使用它”错误
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”将帮助您观察目录或文件的不同属性和行为。
希望有帮助