【发布时间】:2010-09-17 19:13:24
【问题描述】:
我有一个带有模板列的数据网格。模板有一张图片:
<Image HorizontalAlignment="Left" Name="ImageProduct" Stretch="None" VerticalAlignment="Center" Grid.Row="0" Grid.Column="0" Source="{Binding Path=ProductImage, Mode=OneWay}" RenderOptions.BitmapScalingMode="HighQuality"/>
网格滚动非常缓慢,因为 ProductImage 在用户滚动网格时会延迟加载私有位图图像对象。我正在考虑使用另一个线程来加载私有变量(在 ProductImage 属性后面)。由于各种原因,我的代码遇到了麻烦...一个例外是我只能在 STA 线程上更新 UI,另一个是依赖源不能位于与依赖接收器不同的线程中 (?)
我想不出一个好的方法来做到这一点。网格的代码看起来像这样,在后台工作人员尝试失败:
var productVMList = GetProducts();
_window.ReceivingBatchProductsGrid.ItemsSource = productVMList;
var setProductImageWorker = new BackgroundWorker();
setProductImageWorker.DoWork += setProductImageWorker_DoWork;
setProductImageWorker.RunWorkerAsync(productVMList);
这里是 DoWork:
var products = (ObservableCollection)e.Argument;
foreach (var product in products)
{
product.SetProductImage();
}
有什么想法吗?
【问题讨论】:
标签: wpf backgroundworker