1

我正在尝试使用这样的异步调用从 Internet 下载图像:

    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()

我还能尝试什么来摆脱这个错误?

4

1 回答 1

1

回调方法在后台线程中运行,而不是在 UI 线程中。不幸的是,BitmapImages 只能在 UI 线程中实例化。如果您需要从回调中访问 UI 线程,请尝试以下操作:

Deployment.Current.Dispatcher.BeginInvoke(() =>
   {
      BitmapImage image = new BitmapImage();
      image.SetSource(e.Result);  
      SecondTile.Source = image;  
   });
于 2013-05-30T06:46:34.173 回答