0

В моем приложении WP7 я загрузил 200 изображений из Интернета и сохранил их в изолированном хранилище. Когда отладка всех изображений загружается в панорамном режиме по методу очереди, и я могу просматривать, когда он подключен к ПК. после отключения его от ПК, когда я открываю приложение и перемещаюсь по изображениям, он показывает некоторые изображения и завершается.Сбой приложения при отображении большого количества изображений

if (i < 150) 
    { 

     WebClient m_webClient = new WebClient();    
     Uri m_uri = new Uri("http://d1mu9ule1cy7bp.cloudfront.net/2012//pages/p_" + i + "/mobile_high.jpg"); 
     m_webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted); 
     m_webClient.OpenReadAsync(m_uri); 

    }   

void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    int count; 

    try 
    { 
     Stream stream = e.Result;    
     byte[] buffer = new byte[1024]; 

     using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 

      //isf.Remove(); 

      using (System.IO.IsolatedStorage.IsolatedStorageFileStream isfs = new IsolatedStorageFileStream("IMAGES" + loop2(k) + ".jpg", FileMode.Create, isf)) 
      { 
       count = 0; 

       while (0 < (count = stream.Read(buffer, 0, buffer.Length))) 
       { 
        isfs.Write(buffer, 0, count); 
       } 

       stream.Close(); 
       isfs.Close(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 
+0

Не могли бы вы дать нам некоторые коды того, как вы используете isolStorage, ...? – ChapMic

+0

работает в реальном устройстве, а? –

+0

Да только в реальном устройстве .. Я загрузил изображения в панорамном режиме, сначала добавил 3 изображения из магазина iso и с помощью выбора измененного события, чтобы удалить первое изображение и добавить 4-е изображение vicecersa .. –

ответ

0

После разговора по Skype я рассмотрел его код и выяснил, что его проблема связана с его изолированным проводником. Он не мог подключиться к его компьютеру, чтобы он дал ошибку. Не имеет ничего общего с загрузкой изображения.

1

Я думаю, что ваша проблема в том, что если вы загружаете слишком много изображений сразу в петлю момент, когда вы выходите из цикла и дать фокус обратно в поток пользовательского интерфейса все Garbage Collection на растровых изображениях сделанный.

This article объясняет это немного лучше и предоставляет решение.

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

This SO question также об этой проблеме (загрузка нескольких изображений и сбоев (исключение)). У этого также есть ответ Microsoft на него, я основывал свое решение на их ответе.

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

private void LoadImages(List<string> sources) 
{ 
    List<string>.Enumerator iterator = sources.GetEnumerator(); 
    this.Dispatcher.BeginInvoke(() => { LoadImage(iterator); }); 
} 

private void LoadImage(List<string>.Enumerator iterator) 
{ 
    if (iterator.MoveNext()) 
    { 
     //TODO: Load the image from iterator.Current 

     //Now load the next image 
     this.Dispatcher.BeginInvoke(() => { LoadImage(iterator); }); 
    } 
    else 
    { 
     //Done loading images 
    } 
} 
+0

Вы сказали, что нет необходимости используя здесь iso store..for моего приложения его обязательный для меня, чтобы иметь локальный каталог и пути к файлу –

+0

Я не сказал этого, я сказал, что вы можете легко изменить мое решение в соответствии со своим сценарием. – SynerCoder

+0

Я могу переписать свой код, чтобы он соответствовал вашей проблеме, но тогда мне нужно знать, как вы его зацикливаете. Что делает 'loop2 (k)' do? Что такое 'k'? Каков фактический цикл загрузки? – SynerCoder

0

Я бы очень опасался последствий для памяти загрузки 200 изображений одновременно. Профилировали ли вы использование памяти? Использование слишком большого объема памяти может привести к прекращению вашего приложения.

Смежные вопросы