Как убить функцию запуска потока с бесконечной l oop, вызываемой через PInvoke - PullRequest
3 голосов
/ 29 января 2020

В моем приложении ASP. NET Core 2.2 я вызываю встроенную функцию через PInvoke. При некоторых условиях функция приводит к бесконечному l oop. У меня нет доступа к источнику библиотеки.

Вот как я выполняю функцию в отдельном потоке:

var thread = new Thread(
    () =>
    {
         threadId = GetCurrentThreadId();
         try
         {
              result = callFunctionWithPinvoke();
         }
         catch (Exception ex)
         {
              threadEx = ex;
         }
    })
    {
        Name = "Calculation",
        Priority = ThreadPriority.Highest
    };

thread.Start();

Через некоторое время я пытаюсь остановить поток, как этот :

thread.Interrupt();
thread.Abort();

if (thread.IsAlive)
{
     var success = TerminateThread(new IntPtr(threadId), 1);
     var lastError = GetLastError();
}

Даже очень плохая Функция TerminateThread не может уничтожить поток.

Мой вопрос сейчас: что мне здесь не хватает? Можно ли убить поток с бесконечным l oop, или это просто невозможно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...