Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何终止调用堆栈已损坏的.NET线程?_C#_Multithreading - Fatal编程技术网

C# 如何终止调用堆栈已损坏的.NET线程?

C# 如何终止调用堆栈已损坏的.NET线程?,c#,multithreading,C#,Multithreading,我的应用程序中有一个线程正在运行可能导致调用堆栈损坏的代码(我的应用程序是DLL的测试工具) 假设我有一种检测子线程是否行为异常的方法,我将如何终止它?据我所知,在行为不端的线程上调用Thread.Abort()相当于在其内部引发异常。我担心这不是一个好主意,前提是线程的调用堆栈可能已损坏。有什么建议吗?如果代码行为不端,它可以做任何事情,并且可以影响整个过程中的任何事情,在任何线程上 最可靠的解决方案是在单独的进程中运行不受信任的代码,然后在该进程出现错误时终止该进程。如果您运行的不受信任代码

我的应用程序中有一个线程正在运行可能导致调用堆栈损坏的代码(我的应用程序是DLL的测试工具)


假设我有一种检测子线程是否行为异常的方法,我将如何终止它?据我所知,在行为不端的线程上调用Thread.Abort()相当于在其内部引发异常。我担心这不是一个好主意,前提是线程的调用堆栈可能已损坏。有什么建议吗?

如果代码行为不端,它可以做任何事情,并且可以影响整个过程中的任何事情,在任何线程上


最可靠的解决方案是在单独的进程中运行不受信任的代码,然后在该进程出现错误时终止该进程。

如果您运行的不受信任代码可能会损坏您的进程,请在单独的进程中运行该代码,并使用进程间通信与之通信。如果您想提前终止不受信任的代码,您可以终止该进程

将DLL加载到一个新的AppDomain中,并使用该方法从那里运行DLL中的代码。

除了接受答案之外,我想补充一点,忽略Thread.Abort非常容易

try
{
    ...
}
catch (ThreadAbortException)
{
   Thread.ResetAbort();
}

你需要重写代码,因为这永远不会发生。正如我所说,我正在尝试制作一个测试工具,所以我必须假设我正在测试的任何dll函数都有潜在的危险。我的阅读理解再次让我失望。很抱歉。这篇文章可能会让你感兴趣,它来自埃里克·利珀特本人:如果我们能阅读普通语言,为什么我们会从事计算机科学;)杀人总是这样。在你自己的线程上运行它会有风险,而且不可靠,这要感谢可能不受信任的终结器,它可以做任何事情……突然间,我的脑海中出现了那首蒙兹歌曲“Kill dash nine”。