Чтобы найти текущий поток Id use - `Thread.CurrentThread.ManagedThreadId '. Но в этом случае вам, возможно, потребуется текущий идентификатор win32 нити - используйте PInvoke, чтобы получить его с помощью этой функции:
[DllImport("Kernel32", EntryPoint = "GetCurrentThreadId", ExactSpelling = true)]
public static extern Int32 GetCurrentWin32ThreadId();
Сначала вам нужно, чтобы сохранить управляемый идентификатор потока и соединения нити ID win32 - использовать словарь который сопоставляет идентификатор win32 управляемому потоку.
Тогда, чтобы найти поток, это идентификатор итерация над нитью текущего процесса с использованием Process.GetCurrentProcess() Нитки и найти нить с этим идентификатором:.
foreach (ProcessThread thread in Process.GetCurrentProcess().Threads)
{
var managedThread = win32ToManagedThread[thread.id];
if((managedThread.ManagedThreadId == threadId)
{
return managedThread;
}
}
Ну если есть управляемый ответ без dllimport, я должен принять его ответ. Но большое спасибо за усилия. И я мог бы использовать ваш ответ, так как он надежный. – LolaRun
Это ближе к реальной вещи (читайте на родной стороне), поскольку управляемые потоки могут быть переведены на волокна, работающие на одном родном потоке, и поскольку вы упомянули об отладчике vs, это, вероятно, то, что вы хотите. – Blindy
Поскольку я нашел это, набрал его, а затем было сказано, что он устарел, текущий способ сделать это - Thread.CurrentThread.ManagedThreadId – James