在创建HttpNotificationChannel时获取异常,但在逐步调试时正常工作

时间:2014-04-16 07:38:44

标签: c# windows-phone-8 push-notification windows-phone mpns

我使用以下代码创建推送通知渠道。

问题在于,当我执行代码时,大部分时间(并非总是),此函数抛出System.NullReferenceException。但是,如果我设置断点并逐步调试它,它将正常工作并返回有效的HttpNotificationChannel

private string AcquirePushChannel()
{
    HttpNotificationChannel currentChannel =  HttpNotificationChannel.Find("MyPushChannel");

    if (currentChannel == null)
    {
        currentChannel = new HttpNotificationChannel("MyPushChannel");
        currentChannel.Open();
        currentChannel.BindToShellTile();
        currentChannel.BindToShellToast();
    }

    currentChannel.ChannelUriUpdated += (s, e) =>
    {
        // Code here
    };
    currentChannel.ShellToastNotificationReceived += async (s, e) =>
    {
        // Code here
    };

    return currentChannel.ChannelUri.AbsoluteUri;
}

因为当逐步调试它正常工作时,我无法找到问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

问题是打开频道是一种异步操作。这就是ChannelUriUpdated事件的原因。无法从函数返回ChannelUri,因为它可能在此函数结束时不可用。它将在此块中提供

currentChannel.ChannelUriUpdated += (s, e) =>
{
    // here the channel uri is available as e.ChannelUri
};

调试时它适用于你的原因是在你走到最后一行之前事件被触发了。