Windows Phone C#, UnauthorizedAccessException при создании BitmapImage

Я пытаюсь загрузить изображение из Интернета, используя асинхронный вызов, например:

    private void DoGetAlbumart(object sender, DoWorkEventArgs e)
    {
        string req = (string)e.Argument;
        WebClient wc = new WebClient();
        wc.OpenReadCompleted += new OpenReadCompletedEventHandler(ReadWebRequestCallback);
        wc.OpenReadAsync(new Uri(req)); 

    }

    void ReadWebRequestCallback( object sender, OpenReadCompletedEventArgs e)
    {
        if (e.Error == null && !e.Cancelled)  
        {  
            try  
            {  
                BitmapImage image = new BitmapImage();  
                image.SetSource(e.Result);  
                SecondTile.Source = image;  
            }  
            catch (Exception ex)  
            {  
            }  
        }  
        else  
        {  
        }  
    }

Кажется, что когда точка останова достигает BitmapImage image = new BitmapImage(), я получил следующее исключение:

ex = {System.UnauthorizedAccessException: недопустимый межпоточный доступ. в MS.Internal.XcpImports.CheckThread() в System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex, IntPtr constructDO) в System.Windows.Media.Imaging.BitmapImage..ctor()

Что еще я могу попытаться избавиться от этой ошибки?

1 ответ

Решение

Методы обратного вызова выполняются в фоновых потоках, а не в потоке пользовательского интерфейса. К несчастью, BitmapImages может быть создан только в потоке пользовательского интерфейса. Если вам нужен доступ к потоку пользовательского интерфейса из обратного вызова, попробуйте следующее:

Deployment.Current.Dispatcher.BeginInvoke(() =>
   {
      BitmapImage image = new BitmapImage();
      image.SetSource(e.Result);  
      SecondTile.Source = image;  
   });
Другие вопросы по тегам