【发布时间】:2013-12-11 13:39:00
【问题描述】:
所以我在谷歌上搜索到它由于使用了不安全的代码而冻结,并且 AbortException 仅在控制流返回到托管代码时才抛出。所以,就我而言,我有一个本地库,在线程中调用。所以有时我不能中止它,因为库是本机的,Abort 方法不仅什么都不做,而且冻结了调用线程。
所以,我想解决它。
例如,使用不同的流程应该会有所帮助,但它非常复杂。
因此,较轻的解决方案是使用 'AppDomains' 。但无论如何我应该创建一个exe并调用它。我试图像这样在内存中生成它
var appDomain = AppDomain.CreateDomain("newDomain");
var assemblyBuilder = appDomain.DefineDynamicAssembly(new AssemblyName("myAsm"), AssemblyBuilderAccess.RunAndCollect);
var module = assemblyBuilder.DefineDynamicModule("myDynamicModule");
var type = module.DefineType("myStaticBulder", TypeAttributes.Public);
var methBuilder = type.DefineMethod("exec", MethodAttributes.Static | MethodAttributes.Public);
var ilGenerator = methBuilder.GetILGenerator();
但是我发现只有EMIT-way,非常非常复杂。
是否存在肤浅的解决方案?
【问题讨论】:
-
看看
ManualResetEvents 而不是Abort() -
几乎任何您想查看的地方,即使线程纯粹在托管代码中运行,建议不要使用
Thread.Abort。 -
虽然这不能解决您的问题,但请不要使用
Thread.Abort,而是查看正常退出的线程。
标签: c# .net multithreading reflection appdomain