Mag*_*son 6 c# data-binding multithreading mvvm mvvm-light
我在一个单独的任务中收集数据,我想使用一个数据将结果数据绑定到GUI组件ObservableCollection<>.所以我的代码是这样的:
private ObservableCollection<MyItem> _items;
public ObservableCollection<MyItem> Items
{
get { return _items; }
set
{
if (_items.Equals(value))
{
return;
}
_items = value;
RaisePropertyChanged("Items");
}
}
private void LoadData()
{
Task task = Task.Factory.StartNew(() =>
{
ObservableCollection<MyItem> itms = _htmlParser.FetchData(...);
Dispatcher.CurrentDispatcher.Invoke((Action)delegate
{
Items = itms;
});
});
}
Run Code Online (Sandbox Code Playgroud)
从执行某些HTTP请求的组件中获取数据.我得到的错误是:
Must create DependencySource on same Thread as the DependencyObject.
我正在使用MVVM Light工具包框架.我还尝试将结果作为消息发送,但最终出现在同一错误消息中.任何想法或指针?
编辑:这是问题:
public class MyItem
{
public string Id { get; set; }
public string Name { get; set; }
public BitmapImage Image { get; set; } // <--- A big No No because it inherits from the DependencyObject
public Uri Uri { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我将其更改BitmapImage为byte[]数据类型.
您收到的异常(“必须在与 DependencyObject 相同的线程上创建 DependencySource”)表明正在后台线程上创建某些内容并在 UI 线程上使用。是否有任何 UI 控件正在创建并存储在集合中以供 UI 使用?
我看到 ObservableCollection 本身是在后台线程上创建的,但我认为这不是问题 - 不幸的是我不在办公室编写代码并确认这一点。
| 归档时间: |
|
| 查看次数: |
2678 次 |
| 最近记录: |