我有一个问题,我发送一次消息,而一次调用Subscriber,但是下次调用两次,依此类推...这是我的代码。 这是邮件发件人
public void OnSuccess(Java.Lang.Object result)
{
UploadTask.TaskSnapshot taskSnapShot = (UploadTask.TaskSnapshot)result;
string downloadURL = taskSnapShot.DownloadUrl.ToString();
string fileName = taskSnapShot.Metadata.Name;
GBPaperReceipt.Model.ImageFile imageFile = new Model.ImageFile
{
FileName = fileName,
FilePath = downloadURL
};
MessagingCenter.Send((App)Xamarin.Forms.Application.Current, MessageStrings.ImageUploadEvent, imageFile);
//save this live storage image url in receipt table
//MessagingCenter.Send<Xamarin.Forms.Application, string>((Xamarin.Forms.Application)Xamarin.Forms.Application.Current, ChatModuleConstant.UploadMediaEvent, downloadURL);
}
这是消息接收者
MessagingCenter.Subscribe<App, ImageFile>((App)Application.Current, MessageStrings.ImageUploadEvent,async (a, imageFile) =>
{
_viewModel.Receipt.ImagePath = imageFile.FilePath;
_viewModel.Receipt.ImageName = imageFile.FileName;
try
{
await DependencyService.Get<IReceiptService>().SaveReceipt(_viewModel.Receipt);
}
catch (Exception ex)
{
await DisplayAlert(
"Error!", ex.Message, "OK");
}
DependencyService.Get<ICamera>().DeletePhoto(_viewModel._imageToBeDeletedOnSaveCommand);
Dialogs.HideLoading();
Application.Current.MainPage = new NavigationPage(new DashboardPage());
});
退订
protected override void OnDisappearing()
{
base.OnDisappearing();
MessagingCenter.Unsubscribe<App, string>((App)Application.Current, MessageStrings.ErrorEvent);
MessagingCenter.Unsubscribe<App, string>((App)Application.Current, MessageStrings.ImageUploadEvent);
}
答案 0 :(得分:0)
尤其是在导航页面内使用页面时,只要页面进入视图,您的订阅事件都会被添加。如果您前后导航几次,则对消息传递中心的订阅将被添加几次,从而使事件倍增。
最安全的方法是在页面构造函数中进行订阅,即使在这种情况下,也有必要先取消订阅然后再进行订阅。
您的“出现/消失”方法也可能会起作用,但是我不能完全确定“出现/消失”方法能否为您解雇。
但是,您也可以尝试将取消订阅移动到base.OnDisappearing()的前面,因为您应该在调用基类进行页面的内部拆除之前取消订阅。
如果这不起作用,请订阅构造函数。