我正在开发一个多线程应用程序。
我的一个线程运行非托管代码,当非托管代码出现异常时,thread.Abort()不执行任何操作。并且运行将在thrad.Abort()行中停止。
如何在C#中中止运行非托管代码的线程?
答案 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:我不知道这是不是一个糟糕的解决方案,但它对我有用