C# Windows 10 UWP应用程序在非同步拾取联系人时崩溃

C# Windows 10 UWP应用程序在非同步拾取联系人时崩溃,c#,asynchronous,async-await,windows-phone,windows-10-universal,C#,Asynchronous,Async Await,Windows Phone,Windows 10 Universal,在使用Windows10UWP手机应用程序时,我遇到了联系人选取器API对象的问题。手机已安装开发者预览10532 我有一个按钮的事件处理程序: private async void pickContactAppBar_Click (object sender, RoutedEventArgs e) { try { ContactPicker contactPicker = new ContactPicker();

在使用Windows10UWP手机应用程序时,我遇到了联系人选取器API对象的问题。手机已安装开发者预览10532

我有一个按钮的事件处理程序:

    private async void pickContactAppBar_Click (object sender, RoutedEventArgs e)
    {
        try
        {
                ContactPicker contactPicker = new ContactPicker();
                IList<Contact> pickedContacts = await contactPicker.PickContactsAsync();
                if (pickedContacts != null)
                   int pickedContactsCount = pickedContacts.Count;
        }
        catch (Exception ex)
        {
            MessageDialog messageDialog = new MessageDialog(ex.Message);
            await messageDialog.ShowAsync();
        }
    }
private async void pickContactAppBar\u单击(对象发送方,RoutedEventArgs e)
{
尝试
{
ContactPicker ContactPicker=新的ContactPicker();
IList pickedContacts=等待contactPicker.PickContactsAsync();
如果(pickedContacts!=null)
int pickedContactsCount=pickedContacts.Count;
}
捕获(例外情况除外)
{
MessageDialog MessageDialog=新建MessageDialog(例如Message);
wait messageDialog.ShowAsync();
}
}
它应该给我用联系人选择器选择的联系人

问题是,在联系人选取器窗口出现后,它会在半秒钟后,即在我成功选取联系人之后,使应用程序崩溃。它崩溃,即使我没有做任何事后,选择器显示,但只是简单地等待。它似乎在加载联系人列表时崩溃

它发生在我部署调试或发布代码时,而不是在我从VisualStudio按F5启动应用程序时。此外,不会引发异常

我非常确定我使用的是async并正确地等待。由于此方法是事件处理程序,因此它必须是async void

该方法包含更多的代码,也包含更多的wait代码,但我添加了MessageDialog调用以查看其结束位置,并且在调用PickContactsAsync()之后立即发生。在那之后什么都不会被执行。我甚至注释掉了它代码的所有其他部分


对可能发生的事情有什么建议吗?谢谢。

有什么例外?您正在从后台线程修改UI线程吗?@O.O,没有例外。不,我不会那样做的。我只是尝试选择一个或多个联系人,从返回的联系人类型对象中获取一些字段。但是,即使事件处理程序中只有这段代码,崩溃也会发生,没有其他代码。一旦选取器出现,联系人列表开始填满,它会在半秒钟后崩溃,没有任何用户输入。在主页的构造函数中调用异步函数是一种好的做法吗?不能用await调用它,因为构造函数不能异步。我有一个async void Init()函数,它的调用方式是这样的……在这种情况下,您不应该使用async void,因为构造可能会在初始化所有内容之前完成。另外,async void是fire and forget,如果在init期间发生异常,您的程序将崩溃,您将不知道发生了什么错误。此外,您还需要在涉及调用链的问题中添加更多代码,以便任何人都能为您提供更多帮助。@O.O我将其返回值更改为Task,但问题仍然存在。请参见此处的代码:。我可以用这个最小的代码复制它。页面上有一个命令按钮“添加”。有什么例外?您正在从后台线程修改UI线程吗?@O.O,没有例外。不,我不会那样做的。我只是尝试选择一个或多个联系人,从返回的联系人类型对象中获取一些字段。但是,即使事件处理程序中只有这段代码,崩溃也会发生,没有其他代码。一旦选取器出现,联系人列表开始填满,它会在半秒钟后崩溃,没有任何用户输入。在主页的构造函数中调用异步函数是一种好的做法吗?不能用await调用它,因为构造函数不能异步。我有一个async void Init()函数,它的调用方式是这样的……在这种情况下,您不应该使用async void,因为构造可能会在初始化所有内容之前完成。另外,async void是fire and forget,如果在init期间发生异常,您的程序将崩溃,您将不知道发生了什么错误。此外,您还需要在涉及调用链的问题中添加更多代码,以便任何人都能为您提供更多帮助。@O.O我将其返回值更改为Task,但问题仍然存在。请参见此处的代码:。我可以用这个最小的代码复制它。页面上有一个命令按钮“添加”。