我有一个线程,其中包含执行IronPython脚本的操作。由于某些原因,我可能需要随时停止该线程,包括脚本执行。如何实现这一点?第一个想法是使用Thread.Abort()
,但是它被认为是不好的做法...
我有一个线程,其中包含执行IronPython脚本的操作。由于某些原因,我可能需要随时停止该线程,包括脚本执行。如何实现这一点?第一个想法是使用Thread.Abort()
,但是它被认为是不好的做法...
myprogram.exe
可以启动一个新进程来运行 myprogram.exe
。 - phoog根据你的问题和后续评论,我可以向你建议两个选项,但需要提醒以下:
If your thread loops executing something on each iteration, you can set a volatile boolean flag such that it exits after finishing the current iteration (pseudocode because I'm not familiar with python):
while shouldExit = false
// do stuff
Then just set the flag to true
when you want the thread to stop and it will stop the next time it checks the condition.
If you cannot wait for the iteration to finish and need to stop it immediately, you could go for Thread.Abort
, but make absolutely sure that there is no way you can leave open file handles, sockets, locks or anything else like this in an inconsistent state.
Thread.Abort()
,因为到处都有人写着类似“永远不要使用它!!!”的东西。但现在我在程序中使用它了 - 处理程序可能会保持打开状态。 - aplavinAbort()
后是否保证会停止? try {
// do work - no try/catches here
}
catch(ThreadAbortException)
{
// log exit
}
- aplavintry
块内部被某些I/O阻塞,否则它应该正常工作。 - Tudor
Thread.Abort()
是可行的方法。更好的解决方案是修改应用程序的设计。 - Cody GrayThread.Abort
不理想的看法是正确的,但那个函数并不邪恶,邪恶的是它所做的事情。既然它正好做到了你想要的... - Cody Gray