【发布时间】:2014-03-24 19:40:34
【问题描述】:
我遇到了异常
无法访问已处置的对象。
我知道我遇到了这个异常,因为对象在它有机会返回结果之前已经被释放。我想知道的是检索对象的正确方法。我的代码中可能有不必要的步骤,并且可能做错了吗?
我的主类中有一个按钮单击事件。它调用下面代码中显示的方法。 GetADComputer 方法位于另一个名为ActiveDirectory.cs 的类中。尝试访问已处置对象的结果时出现异常。
public static PrincipalSearchResult<Principal> GetADComputer(string pcName)
{
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
using (ComputerPrincipal computer = new ComputerPrincipal(ctx))
{
computer.Name = String.Format("*{0}*", pcName);
using (PrincipalSearcher searcher = new PrincipalSearcher())
{
searcher.QueryFilter = computer;
return searcher.FindAll();
}
}
}
}
【问题讨论】:
-
我没用过
PrincipalSearcher,但你考虑过用return searcher.FindAll().ToList();返回List<Principal>吗?假设Principal对象是完全物化的,那应该不再需要上下文了...... -
@JonSkeet Principal 对象没有完全实现,DirectoryServices 延迟加载属性。 (你也许可以改变它,但我不知道如何)
-
@ScottChamberlain: 嘘 :(
-
这是@JonSkeet!哈哈。谢谢回复。使用列表方法是可行的,但我正在研究@ScottC 关于对象物化的说法。
标签: c# winforms using-statement