Загрузка изображений с URL останавливает пользовательский интерфейс на Windows Phone - PullRequest
1 голос
/ 09 декабря 2011

Я пытаюсь загрузить список новостей с веб-сайта, поэтому сначала я делаю запрос на получение новостей (с миниатюрами), и, используя функцию привязки, я назначаю выбранные новости своему списку, который содержит изображение (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>

Работает нормально, но интерфейс зависает, пока не появятся изображения. как я могу это исправить?

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

На самом деле BitmapImages по умолчанию загружает поток пользовательского интерфейса, что может привести к блокировке.В вашем xaml вы должны иметь возможность сделать что-то вроде:

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

Удостоверьтесь, что вы указали BackgroundCreation для CreateOptions.Для получения дополнительной информации я лично нашел этот пост в блоге очень полезным.

0 голосов
/ 09 декабря 2011

Тестировали ли вы, чтобы убедиться, что ваш пользовательский интерфейс не зависает при комментировании строки ImageBrush? Я полагаю, что автоматическое преобразование создает BitmapImage из вашего ImageUrl, который обычно загружается в фоновом потоке, поэтому ваш поток пользовательского интерфейса не должен блокироваться. Вполне возможно, что что-то еще вообще блокирует пользовательский интерфейс, например, чрезмерное количество текста, которое необходимо выложить, или код уровня данных, который заполняет список данными.

...