Вы можете использовать Process Explorer из инструментов SysInternals. http://technet.microsoft.com/en-us/sysinternals/bb896653
Просто откройте его и найдите имя вашего файла. он покажет, какие процессы заблокированы.
Edit:
О, я просто перечитал это и заметил, что вы спросили о конкретной теме. Я не знаю, может ли ProcessExplorer сделать это. Извините!
Редактировать 2:
Второй ответ, который расширяет ответ агента-j:
Если вы можете отредактировать код и добавить в него команду try / catch, чтобы получить IOException, вы также можете записать трассировку стека, поскольку, похоже, это то, что вы хотите проверить:
catch(IOException)
{
LogMessage( string.Format(
"Managed Thread Id: {0}",
System.Threading.Thread.CurrentThread.ManagedThreadId) );
LogMessage( string.Format(
"Stack Trace: {0}",
new System.Diagnostics.StackTrace(true).ToString()) );
}
Редактировать 3
Используя описанный выше подход, вы также можете регистрировать потоки и трассировки стека для всех потоков в процессе, упрощая просмотр журнала и выяснение того, что произошло после смерти. Обновленный код:
catch(IOException)
{
foreach (var thread in System.Diagnostics.Process.GetCurrentProcess().Threads)
{
LogMessage(string.Format(
"Managed Thread Id: {0}",
thread.ManagedThreadId));
LogMessage(string.Format(
"Stack Trace: {0}",
new System.Diagnostics.StackTrace(thread, true).ToString()));
}
}