Para encontrar el Id. De hilo actual, use - `Thread.CurrentThread.ManagedThreadId '. Pero en este caso, es posible que necesite la identificación actual del subproceso win32: use pInvoke para obtenerlo con esta función:
[DllImport("Kernel32", EntryPoint = "GetCurrentThreadId", ExactSpelling = true)]
public static extern Int32 GetCurrentWin32ThreadId();
Primero, deberá guardar la identificación del subproceso administrado y la conexión de la identificación del subproceso win32: use un diccionario que asigne una identificación de win32 al subproceso administrado.
Luego, para encontrar un subproceso por su id, itere sobre el subproceso del proceso usando Process.GetCurrentProcess (). Subprocesos y encuentre el subproceso con ese id:
foreach (ProcessThread thread in Process.GetCurrentProcess().Threads)
{
var managedThread = win32ToManagedThread[thread.id];
if((managedThread.ManagedThreadId == threadId)
{
return managedThread;
}
}