2016-10-28 1 views
0

Je développe une application multithread. Un de mes threads exécute du code non géré, et lorsque le code non géré génère une exception, la commande thread.Abort() n'effectue aucune action. et l'exécution s'arrêtera dans la ligne thrad.Abort(). Comment puis-je annuler le thread qui exécute un code non managé en C#?Comment abandonner un thread qui exécute du code non géré

Répondre

0

J'ai eu un problème similaire. En supposant que votre thread exécute du code non géré et du code managé, j'avoue que vous avez un drapeau et le thread dans le code managé Abandonnez-vous.

Quelque chose comme ceci:

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: Je ne sais pas si c'est une mauvaise solution, mais cela a fonctionné pour moi