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

时间:2012-04-24 17:21:47

标签: c# multithreading assemblies stack-overflow

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

我试图解决这个问题:

  1. 我指定一个线程来调用方法并试图用 在timeintervall之后中止线程(我知道这很糟糕 练习,但我不能改变代码终止友好)。这个 但是不起作用,我认为线程是繁忙的“stackoverflowing” 处理中止呼叫。

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

  3. 问题:

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

1 个答案:

答案 0 :(得分:6)

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

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