SysInternalsツールからProcessExplorerを使用できます。http://technet.microsoft.com/en-us/sysinternals/bb896653
それを開いて、ファイル名を検索するだけです。どのプロセスがロックされているかが表示されます。
編集:
ああ、私はそれを読み直して、あなたが特定のスレッドを求めていることに気づきました。ProcessExplorerでそれができるかどうかはわかりません。ごめん!
編集2:
2番目の答えは、agent-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()));
}
}