Мне нужно прекратить конкретную тему, которую я уже знаю, это идентификатор, я получаю идентификатор, получая System.Diagnostics.ProcessThread
, и я уже обнаружил идентификатор потока, который мне нужен для завершения что я могу сделать, чтобы его прервать.Убивать/прерывать конкретный поток, используя его ID в C#
ответ
Вы можете сделать это с помощью пары методов P/Invoke. Во-первых, вызовите OpenThread
на резьбе с идентификатором вы нашли, чтобы получить дескриптор к нему:
IntPtr handle = OpenThread(THREADACCESS_SUSPEND_RESUME, false, (uint)thd.Id);
Затем вызовите SuspendThread
с помощью ручки вы только полученное:
if (handle != IntPtr.Zero)
var suspended = SuspendThread(threadHandle) == -1
Это приостанавливаемого нить - т.е. он больше не будет работать. Если вы отчаянно хотите, чтобы убить его с силой, вы можете вызвать TerminateThread
на ручке:
TerminateThread(handle, 0); // Or any other exit code.
Убедитесь в том, чтобы закрыть ручку после того, как вы закончите с этим, например, внутри finally
блока, если вы окружив его в попытке/уловке.
Как уже упоминалось в комментариях, принудительное завершение потока, как это, обычно не то, что вы хотите сделать - будьте очень осторожны при использовании этого. Приостановка нить позволяет возобновить его на более позднем этапе, Нагрузочный немедленно убивает нить (далее about why you shouldn't abort threads here)
Кроме того, MSDN documentation on TerminateThread упоминает следующее:
TerminateThread опасная функция которые должны использоваться только в самых крайних случаях. Вы должны называть TerminateThread только если вы точно знаете, что делает целевой поток, и вы управляете всем кодом, который может быть запущен целевой поток во время завершения.
P/вызывает:
[DllImport("kernel32.dll",SetLastError=true)]
static extern int SuspendThread(IntPtr hThread);
[DllImport("kernel32.dll")]
static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle,
uint dwThreadId);
[DllImport("kernel32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool CloseHandle(IntPtr hObject);
[DllImport("kernel32.dll")]
static extern bool TerminateThread(IntPtr hThread, uint dwExitCode);
Где вы заканчиваете тему? Я этого не вижу. –
@SriramSakthivel. Вы правы, также включили 'TerminateThread'. – aevitas
Примечание: для тех, кто задается вопросом, что такое 'ThreadAccess', это просто' uint'. –
- 1. Android открыла конкретный SMS-поток по его ID-адресу
- 2. Как остановить конкретный поток в C process.h?
- 3. Как классифицировать поток демона в конкретный поток?
- 4. Получить список, используя его ID
- 5. отправка данных в конкретный поток
- 6. Как я могу прослушивать конкретный поток в болтах, используя шквал и поток apache в yaml
- 7. Выберите DIV, используя его ID + дополнение
- 8. Динамически Показать/Скрыть дайв, используя его ID
- 9. Прочитайте конкретный узел xml, используя условие C#
- 10. прерывая поток по id
- 11. используя поток в JFrame
- 12. Динамически Создайте конкретный div с его дочерними элементами в C#
- 13. Google+ поток пишет, используя C# и Oauth
- 14. ComboBox выберите конкретный объект id
- 15. Laravel - как соединить конкретный ID?
- 16. Выберите конкретный идентификатор, используя JQuery
- 17. Идентификатор процесса Linux и поток ID
- 18. C# Возможно ли прервать конкретный поток внутри ThreadPool?
- 19. Загрузите конкретный файл POM, используя его артефакт Maven
- 20. Изменение положения DIV, используя его Id в JavaScript
- 21. Как получить пользователя, используя его объект Id в parse.com
- 22. Как найти файл в наборе каталогов, используя его ID
- 23. Открыть конкретный div #id в iframe
- 24. Как определить, работает ли поток с помощью ID с C#
- 25. Как открыть поток, используя процесс?
- 26. Отобразить конкретный результат, используя foreach в словаре C#
- 27. Как публиковать поток, используя pyfacebook?
- 28. Изолировать конкретный поток для запуска в среде доверия
- 29. Создайте поток в классе и используйте его в классе C++
- 30. Java параллельный поток, используя только один поток?
Вы пытаетесь прервать поток работает в другом процессе? – Gusdor
Ваш вопрос звучит как * как стрелять по моей ноге? * Можете ли вы объяснить, что вы пытаетесь сделать вместо этого? Зачем вам нужно прекратить поток? –
У вас есть ответ, используя 'TerminateThread' [ниже] (http://stackoverflow.com/a/28295713/2530848). Вы можете использовать его, если вы действительно знаете, что он делает и каковы последствия. Вряд ли вы можете узнать о последствиях «TerminateThread», когда вы не знаете о существовании такой функции. –