C# 使用PrincipalSearcher函数的Winforms进度条

C# 使用PrincipalSearcher函数的Winforms进度条,c#,.net,winforms,C#,.net,Winforms,我编写了一个非常简单的c应用程序,它扫描active directory中锁定的帐户,并将用户名返回到列表框LB1。这是搜索的代码。它属于按钮单击事件: try { PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAIN", "OU=OUnAme,DC=DOMAIN,DC=com"); UserPrincipal qbe

我编写了一个非常简单的c应用程序,它扫描active directory中锁定的帐户,并将用户名返回到列表框LB1。这是搜索的代码。它属于按钮单击事件:

            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事件?我只是想先做一个count函数,确定进度条的最大值,然后添加一个incrament作为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。

没有时间给出完整的答案,但您可能希望查看组件,以便在不阻塞UI线程的情况下执行处理。还请记住如何从后台线程更新UI线程的详细信息。我看到的唯一问题是,它会扫描广告两次。在这一点上,它使得进度条毫无用处,因为我可能只是为了最初的目的让它扫描。