我使用mono 2.10.8.1框架开发一个小型GUI独立应用程序。
我创建了一个桌面GUI应用程序,其中我创建了一个可用于在后台执行某些操作的线程,然后在完成操作后中止调用线程。
Abort()函数在Windows中运行正常,没有任何问题,但无法在Linux中运行。
Thread t1 = new Thread(Linux_Thread);
t1.IsBackground = true;
t1.Start();
//Do some operation in some other function.
Console.WriteLine("Linux thread :: " + t1.ThreadState);
t1.Abort();
Console.WriteLine("Linux thread After Abort :: " + t1.ThreadState);
所以,Linux中Above程序的输出正在跟随::
Linux thread :: Background
Linux thread After Abort :: Background, AbortRequested
在Windows中,上述程序的输出低于::
Linux thread :: Background
Linux thread After Abort :: Stopped
所以,似乎Abort()函数不能在单声道框架中工作,因为它在Windows平台上工作。
之后,由于中止线程问题和应用程序进入挂起状态,My Application的行为方式错误。
是否有人对此问题有所了解,或者是否有人遇到过此类问题?
有三种方法可以关闭正在运行的线程吗?
请尽快告诉我答案。
答案 0 :(得分:0)
Thread.Abort evil ,建议尽量避免使用它。
如果您确定没有其他方法可以实现您想要做的事情,请记住,中止线程并不一定是即时的 - 事实上它可能根本不会发生,这取决于您的线程是什么重新尝试中止了。
MSDN says:“不保证线程立即中止,或者根本不会中止。”
尝试在调用t1.Join ()
后添加t1.Abort ()
- 如果它挂起则可能出现问题。在这种情况下,您需要为所有线程提供本机堆栈跟踪,以查看它挂起的原因(获取附加gdb所需的本机堆栈跟踪:gdb program <PID>
然后执行(在gdb内部):thread apply all backtrace