我正在使用Xamarin在便携式类库中构建Windows手机应用程序。我从Windows Phone相机胶卷获得了图像,我将List传回PCL,并在我的视图中将图像分配给ImageSource。
Windows Phone获取图片
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}"/>
例外:
{System.UnauthorizedAccessException:无效的跨线程访问。
在MS.Internal.XcpImports.CheckThread()at System.Windows.DependencyObject..ctor(UInt32 nativeTypeIndex,IntPtr constructDO)在System.Windows.Media.Imaging.BitmapImage..ctor()
在 Xamarin.Forms.Platform.WinPhone.StreamImagesourceHandler.d__0.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务) System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 在 Xamarin.Forms.Platform.WinPhone.ImageRenderer.d__0.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.AsyncMethodBuilderCore.b__3(对象 状态)}
更新
如果我从资源加载图片,那么它可以正常工作。
App.Locator.TaggingPageVM.ImageSrc = ImageSource.FromFile("50175950-tulips-microsofts.jpg");
对于在Windows手机上创建的图像并将这些图像传回我的PCL一定是错误的
答案 0 :(得分:1)
我正在使用Xamarin:
Device.BeginInvokeOnMainThread(() => { App.Locator.TaggingPageVM.ImageSrc = sender.Result[0].Source; });
修正了跨线程错误