В моей MVC 5 приложения, у меня есть этот код:Исключение не поймают
try
{
var inputFile = new MediaFile { Filename = videoPath };
var outputFile = new MediaFile { Filename = Config.ThumbPath };
using (var engine = new Engine())
{
engine.GetMetadata(inputFile);
if (inputFile.Metadata != null && inputFile.Metadata.Duration.TotalSeconds > 0)
{
var options = new ConversionOptions { Seek = TimeSpan.FromSeconds(inputFile.Metadata.Duration.TotalSeconds/2) };
engine.GetThumbnail(inputFile, outputFile, options);
byte[] imageArray = System.IO.File.ReadAllBytes(Config.ThumbPath);
base64ImageRepresentation = "data:image/jpeg;base64," + Convert.ToBase64String(imageArray);
}
}
}
catch (Exception ex)
{
if (!EventLog.SourceExists("MYAPP"))
EventLog.CreateEventSource("MYAPP", "Application");
EventLog.WriteEntry("MYAPP", "CACHED: " + ex.Message);
EventLog.WriteEntry("MYAPP", "CACHED: " + ex.Message,EventLogEntryType.Warning,234);
}
engine.GetMetadata(inputFile);
Line бросает это:
Необработанное исключение 'System.FormatException' типа произошло в mscorlib.dll
Это в вызове библиотеки ed MediaToolkit, который я установил из NuGet.
Почему моя попытка catch не поймает это исключение?
Файл, который он получает, поврежден, и поэтому он вызывает ошибку, но если это произойдет, я просто хочу перейти к следующему файлу. Но вместо этого приложение останавливается.
В журнале событий нет записи, но есть еще одна запись для исходного ASP.NET.
An unhandled exception occurred and the process was terminated.
Application ID: /LM/W3SVC/2/ROOT
Process ID: 7364
Exception: System.FormatException
Message: Input string was not in a correct format.
StackTrace: at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Convert.ToInt32(String value)
at MediaToolkit.Util.RegexEngine.TestAudio(String data, EngineParameters engine)
at MediaToolkit.Engine.<>c__DisplayClass9.<FFmpegEngine>b__5(Object sender, DataReceivedEventArgs received)
at System.Diagnostics.Process.ErrorReadNotifyUser(String data)
at System.Diagnostics.AsyncStreamReader.FlushMessageQueue()
at System.Diagnostics.AsyncStreamReader.GetLinesFromStringBuilder()
at System.Diagnostics.AsyncStreamReader.ReadBuffer(IAsyncResult ar)
at System.IO.Stream.ReadWriteTask.InvokeAsyncCallback(Object completedTask)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.IO.Stream.ReadWriteTask.System.Threading.Tasks.ITaskCompletionAction.Invoke(Task completingTask)
at System.Threading.Tasks.Task.FinishContinuations()
at System.Threading.Tasks.Task.FinishStageThree()
at System.Threading.Tasks.Task.FinishStageTwo()
at System.Threading.Tasks.Task.Finish(Boolean bUserDelegateExecuted)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot)
at System.Threading.Tasks.Task.ExecuteEntry(Boolean bPreventDoubleExecution)
at System.Threading.Tasks.Task.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
at System.Threading.ThreadPoolWorkQueue.Dispatch()
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
Попробуйте добавить несколько журналов, чтобы проверить, входит ли приложение в блок catch после исключения и до его остановки. –