使用PrincipalSearcher函数Winforms进度条

时间:2014-12-03 18:58:04

标签: c# .net winforms

我写了一个非常简单的c#app,它扫描我们的活动目录中的锁定帐户,并将用户名返回到列表框(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()事件的进度条?我是否只想首先执行计数功能,确定进度条的最大值,然后添加一个incrament作为foreach循环的第一步?

谢谢你, 韦斯

2 个答案:

答案 0 :(得分:0)

使用此

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();
}

答案 1 :(得分:0)

我会在这种情况下执行的一般工作流程,因为您无法从FindAll获得进度反馈。

  • 使您的进度条显示为空(没有填写进度)
  • 状态为“收集帐户”(或任何您想要的内容)
  • FindAll()结果设置为本地变量并计算。
  • 将进度条配置为计数加上一些任意数字,以说明您刚刚执行的查找。
  • 将进度增加到您显示已完成的数字
  • 现在开始循环并更新进度条。

不要忘记在后台线程中执行此操作,以便您可以实际执行工作并同时更新UI。