Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加载一个可观察的集合<;字符串>;带着任务_C#_Task Parallel Library - Fatal编程技术网

C# 加载一个可观察的集合<;字符串>;带着任务

C# 加载一个可观察的集合<;字符串>;带着任务,c#,task-parallel-library,C#,Task Parallel Library,我正在尝试加载active directory中的所有用户,并将其显示在列表框中。然而,如果我像平常一样这样做,我会在很长一段时间内冻结UI线程。那么,我是否可以使用任务在后台线程上填充此集合,同时在插入新名称时仍要更新列表框?因为您无法在单独的线程(或任务,无论什么)中加载所有数据,然后填充ObservableCollection,您可以将当前调度程序传递给操作,并使用其InvokeAsync方法将元素逐个添加到UI线程中的可观察集合中。大概是这样的: public void FetchAnd

我正在尝试加载active directory中的所有用户,并将其显示在列表框中。然而,如果我像平常一样这样做,我会在很长一段时间内冻结UI线程。那么,我是否可以使用任务在后台线程上填充此集合,同时在插入新名称时仍要更新列表框?

因为您无法在单独的线程(或任务,无论什么)中加载所有数据,然后填充ObservableCollection,您可以将当前调度程序传递给操作,并使用其InvokeAsync方法将元素逐个添加到UI线程中的可观察集合中。大概是这样的:

public void FetchAndLoad()
    {
        // Called from the UI, run in the ThreadPool
        Task.Factory.StartNew( () =>
        this.FetchAsync(e => this.Dispatcher.InvokeAsync(
            () => this.observableCollection.Add(e)
            )
        ));
    }

    public void Fetch(Action<string> addDelegate)
    {
                    // Dummy operation
        var list = new List<string>("Element1", "Element2");

        foreach (var item in list)
            addDelegate(item);
    }
public void FetchAndLoad()
{
//从UI调用,在线程池中运行
Task.Factory.StartNew(()=>
this.FetchAsync(e=>this.Dispatcher.InvokeAsync(
()=>this.observateCollection.Add(e)
)
));
}
公共无效获取(操作addDelegate)
{
//虚拟操作
var列表=新列表(“元素1”、“元素2”);
foreach(列表中的变量项)
添加代表(项目);
}

不过,我会根据元素的数量分批执行。

这取决于数据的获取方式。为什么不使用
BackgroundWorker
?它会将所有用户加载到一个单独的线程上的集合中,完成后,您可以将集合项添加到OC中。这是我从DirectorySearcher创建的IEnumerable。我基本上循环了FindAll的结果,得到了samaccountname.Beautiful。非常感谢。是的,我已经有了一个扩展方法,可以为我划分序列。@twreid我很高兴它对你有用,但你甚至不给他所有工作的投票权?