我目前正在开发一个实现fileSystemWatcher的 Windows 服务。视频被上传到一个文件夹中,此时 filewatcher 触发创建的事件,如下所示以转换视频。
private void fileSystemWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
{
if (ConvertVideo(e.FullPath, e.Name))
{
WriteToEventLog(String.Format("Successfully converted video - {0}", e.FullPath), EventLogEntryType.Information);
}
}
在ConvertVideo
创建一个新进程中,但我遇到了进程崩溃/挂起/消失的问题,并且似乎主线程随后被锁定,因为它正在等待WaitForExit()
有效地使服务崩溃,因为随后无法转换其他视频。如果进程终止,我如何避免锁定整个服务?
private bool ConvertVideo(string SourcePath, string Filename)
{
try
{
// Create new process
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.CreateNoWindow = false;
startInfo.UseShellExecute = false;
startInfo.FileName = "C:\Handbrake\HandBrakeCLI.exe";
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = GetArguments(SourcePath, Filename);
int? exitCode = null;
using (Process exeProcess = Process.Start(startInfo))
{
exeProcess.WaitForExit();
exitCode = exeProcess.ExitCode;
}
}
catch(Exception ex)
{
return false;
}
}
注意:此示例的代码已缩短