gpt4 book ai didi

c# - 在 LINQ To ActiveDirecory 中检测到 DisconnectedContext

转载 作者:太空宇宙 更新时间:2023-11-03 14:36:08 24 4
gpt4 key购买 nike

我正在使用 codeplex 中的 LinqToActiveDirectory,当我使用 DirecotrySource 执行查询时,出现以下错误:

检测到 DisconnectedContext

消息:上下文 0x3c5050' 已断开连接。从当前上下文(上下文 0x3c4f98)释放接口(interface)。这可能会导致损坏或数据丢失。为避免此问题,请确保所有上下文/单元都保持事件状态,直到应用程序完全使用表示存在于其中的 COM 组件的 RuntimeCallableWrappers 完成。

这仅在调试时发生,如果我在方法的最后一个大括号上设置断点并按 F10 完成执行。在没有调试的情况下运行时它按预期工作。另外,如果我在最后一个大括号之前调用 GC.Collect(),我可以安全退出。我不想调用 GC,因为我知道最好让他去做他的工作。

我很乐意知道如何解决这个问题。谢谢,塔米尔。

最佳答案

你在 Release模式下仍然有这个问题,它会在以后导致严重的崩溃或数据损坏,但在 Debug模式下它会触发试图帮助你解决问题的托管调试助手:http://msdn.microsoft.com/en-us/library/2c1czate.aspx

一般来说,问题是 COM 组件通常由特定线程拥有(取决于它支持托管的方式和创建位置)。最常见的情况是,您在后台线程或线程池工作线程上创建了上下文,现在该线程已经消失(这会终止 COM 单元或上下文,从而终止 COM 组件),然后您尝试使用 COM 对象。

最终 System.DirectoryServices 使用 ADSI,它是一组 COM 组件。那么你是在线程之间传递东西,使用并行 LINQ,还是类似的东西?例如:如果您在后台线程上使用延迟执行 LINQ,然后将 IEnumerable 传递给前台线程,则查询的实际执行将发生在前台线程上......但是如果您在其中粘贴 .ToList() ,您将强制在后台线程上进行评估。

请告诉我们这些是否有帮助,如果您正在使用线程,我们可以提供更多指导。

关于c# - 在 LINQ To ActiveDirecory 中检测到 DisconnectedContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/996893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com