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

Winforms进度条使用PrincipalSearcher函数

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。

相关文章:
  • 没有找到相关文章