Я использую DirectShowLib-2005 для моего проекта C#/WPF. Когда камера запускается, я запускаю управление средой:Остановка IMediaControl никогда не заканчивается
m_FilterGraph = new FilterGraph() as IFilterGraph2;
/* Initializations */
IMediaControl mediaCtrl = m_FilterGraph as IMediaControl;
hr = mediaCtrl.Run();
DsError.ThrowExceptionForHR(hr);
Приложение работает, камера работает хорошо. Но иногда (не всегда), когда я прекращаю замораживание приложения. Я остановился отладчик, и я увидел, что приложение останавливается на следующей строке:
if (m_FilterGraph != null)
{
IMediaControl mediaCtrl = m_FilterGraph as IMediaControl;
mediaCtrl.Stop(); // <= *** Blocked here ***
Marshal.ReleaseComObject(m_FilterGraph);
m_FilterGraph = null;
}
Как я могу предотвратить это заморозить? Могу ли я добавить тайм-аут или попробовать/поймать?
Я стараюсь перечислил все темы с отладчиком. Прежде чем мои основные окна будут открыты, у меня уже есть 10 потоков, а половина без имени, и я не вижу код или stacktrace. Моя проблема в том, что у меня есть поток, который вызывает 'hr = mediaCtrl.Run();' перед моим основным потоком (я добавил MessageBox с 'Thread.CurrentThread.ManagedThreadId'). И я не знаю, кто это назвал, и точки останова не останавливаются на этом. –
Я перечислил так много потоков с вашим симптомом выше.Это означает, что проблема настолько распространена, и вам просто нужно сделать это дополнительное устранение неполадок, чтобы определить проблему, которая у вас есть. –
Я прочитал все ссылки, но я все еще потерял эту проблему. Я новичок в управлении потоками, и приложение, которое я отлаживаю, не было разработано мной. Я идентифицировал вызов заблокированного потока обработчиком события. Я пытаюсь закрыть его, это, по-видимому, является причиной замораживания в соответствии со всем, что я читал. –