当试图在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
我使用Xamarin so:
Device.BeginInvokeOnMainThread(() => { App.Locator.TaggingPageVM.ImageSrc = sender.Result[0].Source; });
修复了跨线程错误