我使用以下两种方法在用户图像文件夹中选择图像。但是我的问题是,每次调用ChoosePhotoForEventItem()之后,似乎服务都会记住提供的操作(UploadImage)。这意味着第二次调用ChoosePhotoForEventItem(),方法UploadImage被触发两次,第三次被触发三次。我试图将方法转换为属性并将其设置为null,这样就不会改变它。
public void ChoosePhotoForEventItem()
{
var picChooser = this.GetService<IMvxPictureChooserTask>();
picChooser.ChoosePictureFromLibrary(MaxPixelDimension, DefaultJpegQuality,this.UploadImage,delegate {/*Do nothing on cancel*/});
}
private void UploadImage(Stream stream)
{
this.UploadImage(stream, ItemID);
}
非常感谢任何帮助
答案 0 :(得分:2)
查看插件,每次调用GetService
时,都会为新实例注册任务 this.RegisterServiceType<IMvxPictureChooserTask, MvxImagePickerTask>();
https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Plugins/PictureChooser/Cirrious.MvvmCross.Plugins.PictureChooser.Touch/Plugin.cs 中的
看起来每个MvxImagePickerTask实例在https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Plugins/PictureChooser/Cirrious.MvvmCross.Plugins.PictureChooser.Touch/MvxImagePickerTask.cs
中创建自己的UIImagePickerController所以我无法在插件中发现任何错误,特别是因为您的代码每次都在调用var picChooser = this.GetService<IMvxPictureChooserTask>();
。
您是否有一个简单的示例应用程序,人们可以尝试运行来调试它?
如果没有,你可以尝试运行类似的东西:
private int _counter = 0;
public void ChoosePhotoForEventItem()
{
_counter++;
var localCounter = _counter;
var picChooser = this.GetService<IMvxPictureChooserTask>();
picChooser.ChoosePictureFromLibrary(MaxPixelDimension,
DefaultJpegQuality,
(stream) => this.SpecialUploadImage(stream, localCounter),
delegate {/*Do nothing on cancel*/});
}
private void SpecialUploadImage(Stream stream, int theCounter)
{
MvxTrace.Trace("Callback for localCounter {0}", theCounter);
this.UploadImage(stream, ItemID);
}
从中获取的痕迹将有助于我们计算出三次被调用的动作
答案 1 :(得分:2)
问题是,正如Stuart所指出的那样,我使用的服务是单例,并且每次使用该服务时都不会实例化。因此,就目前而言,我正在使用简单的布尔值进行快速修复,以避免任何不必要的上传。斯图尔特告诉我,我使用的mvvm版本已经很老了。因此,似乎在最近的将来切换到vNext是唯一的前进方式。