我正试图将设备日历集成到我的Xamarin窗体应用程序中,但是,在Windows 10 Mobile中,我面临一些严重的问题!在UWP的平台特定项目上,我调用以下本地API:
var store = await Windows.ApplicationModel.Appointments.AppointmentManager.RequestStoreAsync(Windows.ApplicationModel.Appointments.AppointmentStoreAccessType.AppCalendarsReadWrite);调用API后,特定于平台的项目抛出此异常:
消息筛选器指示应用程序正处于繁忙状态。对ASTA (线程9840)的COM调用(IID:{638B2DB-451D-4661-B099-414F34FFB9F1},方法索引: 6)出现死锁并超时。
我想这与多线程和应用领域有关吧!考虑到我已经给了这个应用程序日历许可,以前有没有人遇到过类似的错误?
我的发展环境
发布于 2017-05-15 06:48:42
我已经检查了你的项目并复制了这个问题。您可以通过用.Result关键字替换await来解决这个问题。
虽然异步编程相对简单,但是要记住一些细节,可以防止意外的行为。 异步方法需要在它们的体内包含一个等待关键字,否则它们永远不会屈服! 记住这一点是很重要的。如果在异步方法的主体中没有使用等待,C#编译器将生成一个警告,但是代码将编译并运行,就好像它是一个正常的方法一样。请注意,这也是非常低效率的,因为异步方法的C#编译器生成的状态机不会完成任何事情。
有关更多细节,请参阅异步编程。
不建议在属性的get方法中执行更多的逻辑代码。这样您就可以像下面的代码一样在CalendarEvents方法中获得OnAppearing。
protected async override void OnAppearing()
{
base.OnAppearing();
var events = await DependencyService.Get<ICalendar>(DependencyFetchTarget.GlobalInstance).GetEventsAsync();
}https://stackoverflow.com/questions/43882703
复制相似问题