.NET - Найти идентификатор основного потока внешних приложений - PullRequest
2 голосов
/ 07 февраля 2009

Я пытаюсь найти дескриптор потока main внешнего приложения. Программа, в которой я пытаюсь найти основной поток, является многопоточной, и важно, чтобы я всегда находил основной поток. Я знаю, что самое большее будет одна копия этой программы. Вот как я делаю это сейчас:

Process[] someProcesses = Process.GetProcessesByName("some");
IntPtr threadHandle = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)someProcesses[0].Threads[0].Id);

В большинстве случаев Threads [0] является основным потоком, но в других случаях это не так. Как я могу убедиться, что найденная нить является основной нитью другого приложения?

Thankyou.

Ответы [ 2 ]

3 голосов
/ 07 февраля 2009

Это дикое предположение, но через Processes вы можете получить ProcessThreadCollection через свойство Threads. Каждый поток имеет StartTime (доступно также как Ticks), поэтому, предполагая, что основной поток запускается первым, вы можете выбрать тот, который имеет наименьшее время запуска.

В противном случае, если вы можете получить стек вызовов для каждого потока, вы можете найти точку входа в приложение. Я не смог найти управляемый вызов для этого, но я уверен, что вы можете получить его через P / Invoke.

0 голосов
/ 02 мая 2011

Разговор о позднем приходе на вечеринку - но если кто-то обнаружит это в поиске Google или что-то в этом роде, то, что я делаю, чтобы идентифицировать мою основную нить, присваивается значение Thread.CurrentThread.Name (например, "Main") при запуске моего приложения. до.

...