首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows 10跨平台电话日历项目

Windows 10跨平台电话日历项目
EN

Stack Overflow用户
提问于 2017-05-10 02:33:52
回答 1查看 158关注 0票数 1

我正试图将设备日历集成到我的Xamarin窗体应用程序中,但是,在Windows 10 Mobile中,我面临一些严重的问题!在UWP的平台特定项目上,我调用以下本地API:

代码语言:javascript
复制
var store = await Windows.ApplicationModel.Appointments.AppointmentManager.RequestStoreAsync(Windows.ApplicationModel.Appointments.AppointmentStoreAccessType.AppCalendarsReadWrite);

调用API后,特定于平台的项目抛出此异常:

消息筛选器指示应用程序正处于繁忙状态。对ASTA (线程9840)的COM调用(IID:{638B2DB-451D-4661-B099-414F34FFB9F1},方法索引: 6)出现死锁并超时。

我想这与多线程和应用领域有关吧!考虑到我已经给了这个应用程序日历许可,以前有没有人遇到过类似的错误?

我的发展环境

  • Microsoft Visual Studio Community 2017
  • 版本15.1 (26403.7)
  • VisualStudio.15发布/15.1.0+26403.7
  • 微软.NET框架4.7.02046版
  • 面向通用Windows应用程序的Visual工具15.0.26403.07
  • Xamarin 4.4.0.34 (3f99c5a)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-15 06:48:42

我已经检查了你的项目并复制了这个问题。您可以通过用.Result关键字替换await来解决这个问题。

虽然异步编程相对简单,但是要记住一些细节,可以防止意外的行为。 异步方法需要在它们的体内包含一个等待关键字,否则它们永远不会屈服! 记住这一点是很重要的。如果在异步方法的主体中没有使用等待,C#编译器将生成一个警告,但是代码将编译并运行,就好像它是一个正常的方法一样。请注意,这也是非常低效率的,因为异步方法的C#编译器生成的状态机不会完成任何事情。

有关更多细节,请参阅异步编程

不建议在属性的get方法中执行更多的逻辑代码。这样您就可以像下面的代码一样在CalendarEvents方法中获得OnAppearing

代码语言:javascript
复制
protected async override void OnAppearing()
{
    base.OnAppearing();
    var events = await DependencyService.Get<ICalendar>(DependencyFetchTarget.GlobalInstance).GetEventsAsync();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43882703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档