从URL加载图像会冻结Windows手机上的UI

时间:2011-12-09 03:27:43

标签: url windows-phone-7 asynchronous dispatcher

我正在尝试从网站加载新闻列表,所以首先我请求获取新闻(使用缩略图),然后使用Binding功能,我将Fetched新闻分配到我的列表框中,包含图像(ImageUrl)。

                <ListBox Name="lstNews">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Grid Margin="0,0,12,12"  Width="180" Height="180">
                                <Grid.Background>
                                    <ImageBrush ImageSource="{Binding ImageUrl}"  />
                                </Grid.Background>
                                <StackPanel Background="#AA000000" VerticalAlignment="Bottom" Height="60" >
                                    <TextBlock TextWrapping="Wrap" VerticalAlignment="Bottom" TextAlignment="Center" Text="{Binding Title}" />
                                </StackPanel>
                            </Grid>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

它运行正常,但UI会冻结,直到图像显示出来。我该如何解决?

2 个答案:

答案 0 :(得分:6)

实际上,默认情况下,BitmapImages会加载UI线程,这会导致阻塞。在您的xaml中,您应该能够执行以下操作:

<ImageBrush>
    <ImageBrush.ImageSource>
        <BitmapImage CreateOptions="BackgroundCreation" UriSource="{Binding ImageUrl}"/>
    </ImageBrush.ImageSource>
</ImageBrush>

确保为CreateOptions指定BackgroundCreation。有关详细信息,我个人认为此blog post非常有用。

答案 1 :(得分:0)

您是否测试过以确保在注释掉ImageBrush系列时UI不会冻结?我相信自动转换会从ImageUrl创建一个BitmapImage,它通常会加载到后台线程上,因此您的UI线程不应该阻塞。有可能其他东西一直在阻止UI,例如需要布局的文本过多,或者数据层代码将数据提供给列表。