У меня была аналогичная проблема. Предполагая, что в вашем потоке запущен неуправляемый код и управляемый код, я предлагаю, чтобы у вас был флаг, а поток в управляемом коде прерывался.
Что-то вроде этого:
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: Я не знаю, если это плохие решения, но он работал на меня