如何填充backgroundworker中的ListBox?

丹尼·范·哈伦(Danny van Haaren)

我在从backgroundworker线程填充列表框时遇到麻烦。我目前有以下代码:

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        var lockedUsers = new List<UserPrincipal>();
        using (var context = new PrincipalContext(ContextType.Domain, "domain", smtu, smtp))
        {
            GroupPrincipal grp = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Domain Users");
            foreach (var userPrincipal in grp.GetMembers(false))
            {

                var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userPrincipal.SamAccountName);
                if (user != null)
                {
                    if (user.IsAccountLockedOut())
                    {
                        listBox1.Items.Add(@"domain\ " + user);
                    }
                }
            }
        }
    }

这将返回异常,提示我无法写入主UI,这是正确的。但是我一直无法找到解决方法。我尝试了以下方法,尽管它没有给出任何错误,但没有填充列表框。

    List<string> listusers = new List<string>();


    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        var lockedUsers = new List<UserPrincipal>();
        using (var context = new PrincipalContext(ContextType.Domain, "domain", smtu, smtp))
        {
            GroupPrincipal grp = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Domain Users");
            foreach (var userPrincipal in grp.GetMembers(false))
            {

                var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userPrincipal.SamAccountName);
                if (user != null)
                {
                    if (user.IsAccountLockedOut())
                    {
                        listusers.Add(@"domain\" + user);
                    }
                }
            }
        }
    }

    private async void timerlocked_Tick(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync();
        listBox1.DataSource = listusers;
    }

有任何想法吗?

约书亚·罗宾逊(Joshua Robinson)

DoWorkEventArgs获取传递给DoWorkEventHandler委托具有Result物业

获取或设置一个表示异步操作结果的值。

Result你设定将沿着该发送RunWorkerCompleted事件经过RunWorkerCompletedEventArgs是获取传递给该委托。

因此,要解决此问题,您可以List<string>DoWork事件内部构建,将Result属性设置为该列表,处理该RunWorkerCompleted事件并从中访问该列表RunWorkerCompletedEventArgs.Result

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    var result = new List<string>();
    var lockedUsers = new List<UserPrincipal>();
    using (var context = new PrincipalContext(ContextType.Domain, "domain", smtu, smtp))
    {
        GroupPrincipal grp = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Domain Users");
        foreach (var userPrincipal in grp.GetMembers(false))
        {

            var user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, userPrincipal.SamAccountName);
            if (user != null)
            {
                if (user.IsAccountLockedOut())
                {
                    result.Add(@"domain\ " + user);
                }
            }
        }
    }
    e.Result = result;
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error != null)
    {
        // Error handling.
    }
    if (e.Cancelled)
    {
       // If you support cancellation...
    }
    listBox1.Items.Clear();
    listBox1.Items.AddRange((e.Result as List<string>).ToArray());
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从BackgroundWorker填充DataGridView

来自分类Dev

如何在BackgroundWorker中访问COM对象?

来自分类Dev

如何在BackgroundWorker中启动线程?

来自分类Dev

如何从BackgroundWorker线程中更新标签?

来自分类Dev

在MVVM中,如何防止BackgroundWorker冻结UI?

来自分类Dev

Excel VBA-如何从可变范围填充ListBox的值?

来自分类Dev

如何用字符串数组填充“ asp:ListBox”?

来自分类Dev

如何在引用 ListBox 选项时执行 DataSeries 填充?

来自分类Dev

如何在WPF中的UserControl中运行BackgroundWorker?

来自分类Dev

如何在WPF中的UserControl中运行BackgroundWorker?

来自分类Dev

从行数组填充ListBox

来自分类Dev

Json填充Dual ListBox

来自分类Dev

Json填充Dual ListBox

来自分类Dev

如何使用backgroundWorker在过程中停止实施

来自分类Dev

如何查找在BackgroundWorker线程中引发异常的位置?

来自分类Dev

如何从外部停止BackgroundWorker

来自分类Dev

如何从外部停止BackgroundWorker

来自分类Dev

如何使用委托BackgroundWorker?

来自分类Dev

BackgroundWorker中的TWAIN事件

来自分类Dev

如何在ListBox中更改SelectedItem的前景?

来自分类Dev

如何设置默认选中的ListBox中的CheckBox

来自分类Dev

如何显示指向ListBox中的列表的对象?

来自分类Dev

如何从字典中填充StructuredProperty?

来自分类Dev

如何删除页面中的填充?

来自分类Dev

如何在Firestore中“填充”?

来自分类Dev

如何删除页面中的填充?

来自分类Dev

如何减少CSS中的填充?

来自分类Dev

填充ListBox DataTemplate的性能更好

来自分类Dev

VBA-无法填充ListBox