Что эквивалентно ExitThread (ExitCode) и GetExitCodeThread в C # & .net? - PullRequest
4 голосов
/ 12 апреля 2011

Чтение файла справки VS2008 Я выяснил, что чистый способ выхода из потока (в .net) - это использование оператора возврата (в C #) или позволить потоку достичь конца метода.

Однако я не нашел метода или свойства, которые позволили бы мне установить код выхода потока или способ его получения (как это делается с помощью Win32 API). Поэтому вопрос в том, как мне это сделать, используя C # и .net?

Спасибо за помощь,

Джон.

1 Ответ

7 голосов
/ 12 апреля 2011

Причина, по которой базовые потоковые примитивы Win32 не открыты, заключается в том, что управляемый код не полагается на них.Команда CLR всегда работает над способами оптимизации использования потоков, и это не включает никаких гарантий относительно управляемого 1: 1: неуправляемое отображение потоков (см., Например, «Примечание» на этой странице MSDN ).Если вы действительно хотите сделать это в любом случае, вам нужно настроить оболочки P / Invoke, которые используют неуправляемый дескриптор потока из Win32 GetCurrentThread (), или подключиться к процессу отображения потока самостоятельно с помощью собственного хоста.Я бы не советовал, если только вам абсолютно не нужно взаимодействовать с чем-то, что использует коды выхода потоков и не управляется с учетом кода.Придумайте другой способ контрабанды информации о состоянии, если вы можете сделать все это управляемым (или использовать Task Parallel Library , чтобы абстрагировать уровень от пустых потоков).

...