终止我无法控制的线程运行代码

use*_*089 4 c# stack-overflow multithreading assemblies

我正在做一个项目,我在运行时加载几个程序集,对于每个程序集,我使用反射来查找一些特定的类,实例化它们并调用它们的方法.所有这一切都运行正常,但对于某些调用,进程遇到堆栈溢出,终止了我的整个程序.我没有任何控制我正在加载的程序集的源代码,所以我无法更改我正在执行的代码.

我试图解决这个问题:

  1. 我指定一个线程来调用方法,并尝试
    在timeintervall之后中止线程(我知道这是不好的做法,但我不能更改代码以终止友好).然而,这不起作用,我认为线程是忙于"stackoverflowing"来处理中止调用.

  2. 我已经尝试减少线程可以访问的实际内存,这甚至不是一个解决方案,因为你无法捕获stackoverflow-exception所以我的程序无论如何终止(只是更快)

问题:

  1. 一个线程可以忙于中止吗?是否有某种方法可以中止具有此行为的线程?
  2. 我们怎样才能以良好的方式调用代码(我们无法控制)?

提前致谢!

Tud*_*dor 6

"不透明代码"的建议过程是实际分叉一个新进程并启动它.这样你就可以获得两个好处:

  1. 如果它自身失败,它就会被隔离,也不会让你的主应用程序失效.
  2. 你可以安全地杀死它,它不会像中止线程那样造成麻烦.