当试图在Windows Phone上显示来自相机胶卷的图像时,交叉线程异常

本文关键字:图像 异常 线程 相机 Windows Phone 显示 | 更新日期: 2023-09-27 18:17:44

我正在使用Xamarin在一个便携式类库中构建一个Windows phone应用程序。我已经从Windows Phone Camera Roll中获得了图像,我正在将列表传递回PCL并将图像分配给我视图中的ImageSource。

Windows Phone Get Images:

foreach (var image in CameraRollPictures)
{
    Image img = new Image();
    img.Source = ImageSource.FromStream(() => image.GetImage());
    images.Add(img);
}           
return images;

PCL方法:

    private RelayCommand _importPhoto;
    public RelayCommand ImportPhoto
    {
        get
        {
            return _importPhoto
                ?? (_importPhoto = new RelayCommand(
                                      () =>
                                      {
                                          IOperations op = DependencyService.Get<IOperations>();                                            
                                          Task<List<Image>> t = new Task<List<Image>>(() =>
                                          {
                                              return op.ImportPhoto();
                                          });
                                          t.ContinueWith((sender) =>
                                              {
                                                  PageOp.Navigate(new TaggingPage());
                                                  if (sender.Result.Count != 0)
                                                  {
                                                      try
                                                      {
                                                          App.Locator.TaggingPageVM.ImageSrc = sender.Result[0].Source;
                                                      }
                                                      catch (Exception ex)
                                                      {
                                                      }
                                                  }
                                              }, TaskScheduler.FromCurrentSynchronizationContext());
                                          t.Start();
                                      }));

视图:

<Image Source="{Binding ImageSrc}"/>

例外:

{系统。unauthorizedaccesssexception:无效的跨线程访问。
xcpimports . checkthread (System.Windows.DependencyObject . .ctor(UInt32 nativeTypeIndex, IntPtr在system . windows . media . image . bitmapimage ..ctor()
在Xamarin.Forms.Platform.WinPhone.StreamImagesourceHandler.d__0.MoveNext ()——从抛出异常的前一个位置开始的堆栈跟踪结束——atSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务在System.Runtime.CompilerServices.TaskAwaiter ' 1.GetResult()在Xamarin.Forms.Platform.WinPhone.ImageRenderer.d__0.MoveNext ()——从抛出异常的前一个位置开始的堆栈跟踪结束——atSystem.Runtime.CompilerServices.AsyncMethodBuilderCore.b__3(对象状态)}

如果我从资源中加载图片,那么它工作得很好。

App.Locator.TaggingPageVM.ImageSrc = ImageSource.FromFile("50175950-tulips-microsofts.jpg");

这一定是一个错误与windows手机上创建的图像和传递这些图像回我的PCL

当试图在Windows Phone上显示来自相机胶卷的图像时,交叉线程异常

我使用Xamarin so:

Device.BeginInvokeOnMainThread(() => { App.Locator.TaggingPageVM.ImageSrc = sender.Result[0].Source; }); 

修复了跨线程错误