2016-10-28 8 views
0

Я разрабатываю многопоточное приложение.Как прервать поток, который запускает неуправляемый код

Один из моих потоков запускает неуправляемый код, а когда неуправляемый код вызывает исключение, доза thread.Abort() не выполняет никаких действий. и запуск остановится в строке thrad.Abort().

Как я могу прервать поток, который запускает неуправляемый код на C#?

ответ

0

У меня была аналогичная проблема. Предполагая, что в вашем потоке запущен неуправляемый код и управляемый код, я предлагаю, чтобы у вас был флаг, а поток в управляемом коде прерывался.

Что-то вроде этого:

private Thread thread1 = null; 
private bool thread1Abort = false; 

private void KillAllThreads() { 
     if (thread1 != null && thread1 .IsAlive) 
      thread1Abort = true; 
} 
private void function1() { 
    try { 
      if (mDocumentGroupThreadAbort) { 
       mDocumentGroupThreadAbort = false; 
       //Is you want to restart the thread may be a problem using abort. Thread will raise an error because the abort is not concluded. 
       //mDocumentGroupThread.Abort(); 
       return; 
      } 
      //function with unmanaged code... 
    } catch (System.Threading.ThreadAbortException) { 
      .... 
    } finally { 
      ... 
    } 
} 
static void Main(){ 
    this.thread1 = new Thread(() => { 
      function1(); 
     }); 
    this.thread1.Start(); 
    Console.Readline(); 
} 

PS: Я не знаю, если это плохие решения, но он работал на меня

Смежные вопросы