C# 如何终止调用堆栈已损坏的.NET线程?
我的应用程序中有一个线程正在运行可能导致调用堆栈损坏的代码(我的应用程序是DLL的测试工具)C# 如何终止调用堆栈已损坏的.NET线程?,c#,multithreading,C#,Multithreading,我的应用程序中有一个线程正在运行可能导致调用堆栈损坏的代码(我的应用程序是DLL的测试工具) 假设我有一种检测子线程是否行为异常的方法,我将如何终止它?据我所知,在行为不端的线程上调用Thread.Abort()相当于在其内部引发异常。我担心这不是一个好主意,前提是线程的调用堆栈可能已损坏。有什么建议吗?如果代码行为不端,它可以做任何事情,并且可以影响整个过程中的任何事情,在任何线程上 最可靠的解决方案是在单独的进程中运行不受信任的代码,然后在该进程出现错误时终止该进程。如果您运行的不受信任代码
假设我有一种检测子线程是否行为异常的方法,我将如何终止它?据我所知,在行为不端的线程上调用Thread.Abort()相当于在其内部引发异常。我担心这不是一个好主意,前提是线程的调用堆栈可能已损坏。有什么建议吗?如果代码行为不端,它可以做任何事情,并且可以影响整个过程中的任何事情,在任何线程上
最可靠的解决方案是在单独的进程中运行不受信任的代码,然后在该进程出现错误时终止该进程。如果您运行的不受信任代码可能会损坏您的进程,请在单独的进程中运行该代码,并使用进程间通信与之通信。如果您想提前终止不受信任的代码,您可以终止该进程 将DLL加载到一个新的AppDomain中,并使用该方法从那里运行DLL中的代码。除了接受答案之外,我想补充一点,忽略Thread.Abort非常容易
try
{
...
}
catch (ThreadAbortException)
{
Thread.ResetAbort();
}
你需要重写代码,因为这永远不会发生。正如我所说,我正在尝试制作一个测试工具,所以我必须假设我正在测试的任何dll函数都有潜在的危险。我的阅读理解再次让我失望。很抱歉。这篇文章可能会让你感兴趣,它来自埃里克·利珀特本人:如果我们能阅读普通语言,为什么我们会从事计算机科学;)杀人总是这样。在你自己的线程上运行它会有风险,而且不可靠,这要感谢可能不受信任的终结器,它可以做任何事情……突然间,我的脑海中出现了那首蒙兹歌曲“Kill dash nine”。