本文介绍了而错误的AppDomain卸载。 (异常来自HRESULT:0x80131015),Windows服务里面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我收到一个窗口服务这个错误。
这是我在我的问题
中的代码修改为使用 Parallel.ForEach
(我自己的版本,因为这是一个3.5窗口服务)。究其原因,并行使用减少了一个事实,即它只是时间太长,卸载各个领域,并在并行运行它们应被证明是更快的(似乎是即使只有一个,就是在做每个卸载?线程)。
根据其他职位,我只能猜测,这是不知何故到我使用的事实线程池
发
到卸载
的的AppDomain
秒。 ?我看不出如何避免
公共部分类SomeService:ServiceBase
{
私人经理_appDomainManager;
保护覆盖无效调用OnStop()
{
_appDomainManager.Dispose();
}
}
公共类经理:IDisposable的
{
公共无效的Dispose()
{
Log.Debug( 转让);
的Dispose(真);
GC.SuppressFinalize(本);
}
受保护的虚拟无效的Dispose(BOOL处置)
{
如果(_disposed)回报;
如果(处置)
{
//配置管理资源
的Parallel.For(0,appdomains.Length,UnloadAppDomian);
}
_disposed = TRUE;
}
}
私人UnloadAppDomain(INT appDomainIndex);
公共静态类Parallel35
{
公共静态无效的for(int开始,诠释年底,动作< INT>动作)
{
VAR waitHandles =新的WaitHandle [结束 - 开始]。
为(INT J = 0; J< waitHandles.Length; J ++)
{
waitHandles [J] =新的ManualResetEvent(假);
}
的for(int i =启动; I< END;我++)
{
INT I1 = I - 启动;
ThreadPool.QueueUserWorkItem(
状态= GT;
{
试
{
动作((int)的状态);
}
终于
{
((ManualResetEvent的)waitHandles [I1])设置();
}
},I);
}
WaitHandle.WaitAll的(waitHandles);
}
}
解决方案
我找到了这个bug在出口等待那个从来没有设置的WaitHandle的的AppDomain
取值之一。
The AppDomain
now unloads relatively quickly and my service stops quite quickly.
这篇关于而错误的AppDomain卸载。 (异常来自HRESULT:0x80131015),Windows服务里面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!