我有一个包含大约50个条目的ListBox。每个条目都有3张图片和一个文字
它看起来像这样
<grid>
<TextBlock x:Name="textBlock" Text="{Binding Title}" Foreground="{Binding Brush}" Grid.Column="1" Margin="8,43,-256,8" FontSize="26.667" FontFamily="Segoe WP" TextWrapping="Wrap" RenderTransformOrigin="0.5,0.5" TextTrimming="WordEllipsis" Width="248" Height="90" HorizontalAlignment="Center" VerticalAlignment="Center" />
<Image x:Name="image2" Source="{Binding Picture3}" Margin="48,8,29,33" RenderTransformOrigin="0.5,0.5" Width="100" Height="100" VerticalAlignment="Center" HorizontalAlignment="Center" />
<Image x:Name="image" Source="{Binding Picture2}" Margin="58,16,18,24" RenderTransformOrigin="0.5,0.5" Width="100" Height="100" HorizontalAlignment="Center" VerticalAlignment="Center" />
<Image x:Name="image1" Source="{Binding Picture1}" Margin="69,25,8,16" RenderTransformOrigin="0.5,0.5" Width="100" Height="100" HorizontalAlignment="Center" VerticalAlignment="Center" />
</grid>
问题是,如果我启动应用程序并滚动到最后,显示enries大约需要5-10秒。更糟糕的是,如果我再次向上滚动,也会发生同样的情况。 如果我在BackgroundWorker线程中下载文件导致UI有时会冻结几秒钟,这种行为会变得更糟。
BackgroundWorker Thread如何影响用户界面? 在使用列表框时,我应该特别注意什么?
编辑:
Picture属性是一种为图片创建工作DataBinding的黑客
private BitmapImage m_mediumCoverArt = null;
public BitmapImage MediumCoverWithoutDownload
{
get
{
if (m_mediumCoverArt == null)
{
try
{
using (IsolatedStorageFile isoStore =
IsolatedStorageFile.GetUserStoreForApplication())
{
if (!isoStore.FileExists(GlobalVariables.BEAT_COVER_FOLDER + "/" + GetPath.ForCoverArt(this.m_pictureURL + GlobalVariables.MEDIUM_IMAGE_POSTFIX)))
return null;
using (IsolatedStorageFileStream isoStream =
new IsolatedStorageFileStream(GlobalVariables.BEAT_COVER_FOLDER + "/" + GetPath.ForCoverArt(this.m_pictureURL + GlobalVariables.MEDIUM_IMAGE_POSTFIX),
FileMode.Open, isoStore))
{
m_mediumCoverArt = new BitmapImage();
m_mediumCoverArt.SetSource(isoStream);
return m_mediumCoverArt;
}
}
}
catch (Exception)
{
return null;
}
}
else
{
return m_mediumCoverArt;
}
}
}
我知道图片的加载在UI线程中运行,但它只需要几毫秒,而且只发生一次。因此,即使这可以解释长的第一个加载期,它应该在以后工作没有问题。
答案 0 :(得分:1)
什么是Picture*
财产?它是外部资源的URL吗?默认情况下,图像解码在UI线程上执行。
在Off-thread decoding of images on Mango了解有关图片创建选项的详情。也许它对你有帮助。