相关疑难解决方法(0)

ObservableCollection和线程

ObservableCollection我班上有一个.进一步进入我的课程,我有一个主题.从这个线程我想添加到我的ObservableCollection.但我不能这样做:

这种类型的CollectionView不支持从与Dispatcher线程不同的线程更改其SourceCollection.

请注意,这不是从UI线程发生的,因此我无权访问调度程序.

c# wpf multithreading observablecollection

29
推荐指数
3
解决办法
3万
查看次数

在单独的线程中更新ObservableCollection

在WPF应用程序中,ObservableCollection由LINQ to SQL查询填充和更新.然后使用此ObservableCollection中的值更新UI对象.

通过LINQ to SQL查询更新此ObservableCollection的操作是否可能并且合理地在单独的线程中执行?

如果是,在这种情况下,它将是这个ObservableCollection的同一个实例吗?(我的意思是,如果从LINQ datacontext获取值并且为更新UI提供值的那个不同,那么我将无法更新UI)

.net c# wpf multithreading linq-to-sql

13
推荐指数
3
解决办法
3万
查看次数

Update an ObservableCollection with a background worker in MVVM

Ok, I recently implemented a background worker to perform saving and loading of data.

However, getting this to work on a save command has proved difficult.

基本上,我的save命令生成一个事件,该事件通知集合视图模型,已添加Item,并且该项应添加到其自己的ObservableCollection中.

此时,我得到通常的异常,说我不能在不同的线程上更新ICollection.我已经尝试创建一个调用的新列表类型Dispatcher.Invoke,但是这仍然会生成相同的异常.

我想知道是否有其他人对如何最好地解决这个问题有任何建议?

所以目前我有一个继承自ObservableCollection的类:

public class ThreadSafeObservableCollection<T> : ObservableCollection<T>
{
    public ThreadSafeObservableCollection(List<T> collection)
        : base(collection)
    {
        dispatcher = Dispatcher.CurrentDispatcher;
        rwLock = new ReaderWriterLock();
    }

    protected override void InsertItem(int index, T item)
    {
        if (dispatcher.CheckAccess())
        {
            if (index > this.Count)
                return;
            LockCookie c = rwLock.UpgradeToWriterLock(-1);
            base.InsertItem(index, item);
            rwLock.DowngradeFromWriterLock(ref c);
        }
        else
        {
            object[] …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading observablecollection

10
推荐指数
1
解决办法
8015
查看次数