我有一些代码可以正常工作很长时间来让某人登录我的应用程序:
private Employee Authenticate(string userName, string password) {
DirectorySearcher search = new DirectorySearcher(_rootDirectory);
search.Filter = "(&(objectClass=user)(SAMAccountName=" + userName + "))";
try {
SearchResultCollection results = search.FindAll();
if (0 < results.Count) {
// the rest of my code
// that returns an employee
// if the password matches
}
} catch (Exception err) {
MessageBox.Show(err.Message, "ActiveDir.cs ADWrapper::AuthenticateUser Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return null;
}
最近,一旦我测试值(SearchResultCollection不为空) ,代码就会抛出COMException 。results.Count
Microsoft 的文档没有表明Count应该抛出任何类型的异常。
在调试我的代码时,我可以将断点放在上面的条件上,将鼠标悬停在上面,然后查看异常是否存在。
如果我使用F10让调试器将我带到catch
条件或在断点处等待几秒钟,则该results.Count
变量将变为有效并包含一个整数值。
我猜FindAll方法正在线程中执行,并且我正在线程完成之前检查结果。
有没有办法知道何时完成,或者我刚刚发现了由于Active Directory更新FindAll()
而发生的某种新错误?