如何中止运行非托管代码的线程

时间:2016-10-28 09:45:10

标签: c# multithreading unmanaged

我正在开发一个多线程应用程序。

我的一个线程运行非托管代码,当非托管代码出现异常时,thread.Abort()不执行任何操作。并且运行将在thrad.Abort()行中停止。

如何在C#中中止运行非托管代码的线程?

1 个答案:

答案 0 :(得分: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:我不知道这是不是一个糟糕的解决方案,但它对我有用