我使用以下代码创建推送通知渠道。
问题在于,当我执行代码时,大部分时间(并非总是),此函数抛出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;
}
因为当逐步调试它正常工作时,我无法找到问题。有什么想法吗?
答案 0 :(得分:1)
问题是打开频道是一种异步操作。这就是ChannelUriUpdated事件的原因。无法从函数返回ChannelUri,因为它可能在此函数结束时不可用。它将在此块中提供
currentChannel.ChannelUriUpdated += (s, e) =>
{
// here the channel uri is available as e.ChannelUri
};
调试时它适用于你的原因是在你走到最后一行之前事件被触发了。