diff options
Diffstat (limited to 'MediaBrowser.Controller/MediaInfo/FFMpegManager.cs')
| -rw-r--r-- | MediaBrowser.Controller/MediaInfo/FFMpegManager.cs | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs index 7ef70ea42..9c9b0e9f2 100644 --- a/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs +++ b/MediaBrowser.Controller/MediaInfo/FFMpegManager.cs @@ -634,7 +634,7 @@ namespace MediaBrowser.Controller.MediaInfo await AudioImageResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); - await process.RunAsync().ConfigureAwait(false); + await RunAsync(process).ConfigureAwait(false); AudioImageResourcePool.Release(); @@ -713,7 +713,7 @@ namespace MediaBrowser.Controller.MediaInfo await AudioImageResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); - await process.RunAsync().ConfigureAwait(false); + await RunAsync(process).ConfigureAwait(false); AudioImageResourcePool.Release(); @@ -768,7 +768,7 @@ namespace MediaBrowser.Controller.MediaInfo await AudioImageResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false); - await process.RunAsync().ConfigureAwait(false); + await RunAsync(process).ConfigureAwait(false); AudioImageResourcePool.Release(); @@ -972,6 +972,23 @@ namespace MediaBrowser.Controller.MediaInfo } /// <summary> + /// Provides a non-blocking method to start a process and wait asynchronously for it to exit + /// </summary> + /// <param name="process">The process.</param> + /// <returns>Task{System.Boolean}.</returns> + private static Task<bool> RunAsync(Process process) + { + var tcs = new TaskCompletionSource<bool>(); + + process.EnableRaisingEvents = true; + process.Exited += (sender, args) => tcs.SetResult(true); + + process.Start(); + + return tcs.Task; + } + + /// <summary> /// Sets the error mode. /// </summary> /// <param name="uMode">The u mode.</param> |
