异常信息:System.ObjectDisposedException 在FFme.Primitives.ThreadWorkerBase.RunWorkerLoop()
问题描述
在一台win10电脑拖动播放器的进度条发生了软件崩溃。并截取了日志信息。
解决办法
查看了FFme的源码发现项目所用的版本,在RunWorkerLoop方法,低概率会出现线程错误
解决办法如下:
1:升级到新版本
2:临时捕获异常处理
由于项目的特殊性,选择了第二种修改方式
/// <summary>
/// Implements worker control, execution and delay logic in a loop.
/// </summary>
private void RunWorkerLoop()
{
while (WorkerState != WorkerState.Stopped && !IsDisposing && !IsDisposed)
{
CycleStopwatch.Restart();
var interruptToken = CycleCancellation.Token;
var period = Period.TotalMilliseconds >= int.MaxValue ? -1 : Convert.ToInt32(Math.Floor(Period.TotalMilliseconds));
Task delayTask;
try
{
//临时处理下,捕获下异常,出现异常跳出过此次循环## 标题
delayTask = Task.Delay(period, interruptToken);
}
catch (ObjectDisposedException e)
{
Console.WriteLine("dispose Ex" + DateTime.Now,e.ToString());
continue;
}
var initialWorkerState = WorkerState;
// Lock the cycle and capture relevant state valid for this cycle
CycleCompletedEvent.Reset();
// Process the tasks that are awaiting
if (ProcessStateChangeRequests())
continue;
. . .
}
}