ในการค้นหา Id ของเธรดปัจจุบันให้ใช้ - `Thread.CurrentThread.ManagedThreadId ' แต่ในกรณีนี้คุณอาจต้องใช้ win32 thread id ปัจจุบัน - ใช้ pInvoke เพื่อรับมันด้วยฟังก์ชั่นนี้:
[DllImport("Kernel32", EntryPoint = "GetCurrentThreadId", ExactSpelling = true)]
public static extern Int32 GetCurrentWin32ThreadId();
ก่อนอื่นคุณจะต้องบันทึก thread id ที่มีการจัดการและการเชื่อมต่อ win32 thread id - ใช้พจนานุกรมที่แมป win32 id กับ thread ที่มีการจัดการ
จากนั้นหาเธรดโดยใช้ id วนซ้ำไปตามเธรดของกระบวนการโดยใช้ Process.GetCurrentProcess () เธรดและค้นหาเธรดที่มี id นั้น:
foreach (ProcessThread thread in Process.GetCurrentProcess().Threads)
{
var managedThread = win32ToManagedThread[thread.id];
if((managedThread.ManagedThreadId == threadId)
{
return managedThread;
}
}