Winforms进度条使用PrincipalSearcher函数
本文关键字:PrincipalSearcher 函数 Winforms | 更新日期: 2023-09-27 18:33:04
我编写了一个非常简单的 c# 应用程序,它扫描我们的活动目录以查找锁定的帐户并将用户名返回到列表框 (LB1)。这是搜索的代码。它属于Button_Click事件:
try
{
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAIN", "OU=OUnAme,DC=DOMAIN,DC=com");
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.Enabled = true;
PrincipalSearcher search = new PrincipalSearcher(qbeUser);
foreach (UserPrincipal user in search.FindAll())
{
if (user.IsAccountLockedOut())
{
LB1.Items.Add(user.SamAccountName.ToString());
}
}
}
有没有办法实现填充 FindAll() 事件的进度条?我是否只想先做一个计数函数,以确定进度条的最大值,然后添加一个增量作为foreach循环的第一步?
谢谢Wes
UserPrincipal []user_all = search.FindAll();
int max = user_all.length;
progressBar1.Maximum = max;
progressBar1.Step = 1;
foreach (UserPrincipal user in user_all)
{
if (user.IsAccountLockedOut())
{
LB1.Items.Add(user.SamAccountName.ToString());
}
progressBar1.PerformStep();
}
在这种情况下我会做的一般工作流程,因为您无法从FindAll
获得进度反馈。
- 使进度条显示为空(未填充进度)
- 具有"正在收集帐户"(或任何您想要的状态)
- 将
FindAll()
结果设置为局部变量并获取计数。 - 将进度条配置为计数加上一些任意数字,以说明您刚刚所做的查找。
- 将进度增加到您所做的数字以显示它已完成
- 现在开始循环和更新进度条。
不要忘记在后台线程中执行此操作,以便您可以实际执行工作并同时更新 UI。