Para encontrar o ID do segmento atual, use - `Thread.CurrentThread.ManagedThreadId '. Mas, neste caso, você pode precisar do atual ID do thread do win32 - use o pInvoke para obtê-lo com esta função:
[DllImport("Kernel32", EntryPoint = "GetCurrentThreadId", ExactSpelling = true)]
public static extern Int32 GetCurrentWin32ThreadId();
Primeiro, você precisará salvar a identificação do segmento gerenciado e a conexão do ID do segmento win32 - use um dicionário que mapeie um ID do win32 para o segmento gerenciado.
Em seguida, para localizar um segmento, ele identifica o segmento do processo usando Process.GetCurrentProcess (). Threads e encontra o segmento com esse ID:
foreach (ProcessThread thread in Process.GetCurrentProcess().Threads)
{
var managedThread = win32ToManagedThread[thread.id];
if((managedThread.ManagedThreadId == threadId)
{
return managedThread;
}
}