C# 通过后台任务获取字符串Windows Phone 8.1

C# 通过后台任务获取字符串Windows Phone 8.1,c#,windows-phone,windows-phone-8.1,C#,Windows Phone,Windows Phone 8.1,我终于有了一个后台任务,可以向前台发送Toast通知。不幸的是,我遇到了一个问题。我的后台任务需要检查rss提要是否有更新,但当我运行 HttpClient hc = new HttpClient(); string result = await hc.GetString("http://url.com"); GetString方法被激发后不会发生任何事情,也不会返回,它永远不会跳到下一行。我也尝试了BackgroundDownload,它也像httpclient一样停止了,应该在什么时候下载

我终于有了一个后台任务,可以向前台发送Toast通知。不幸的是,我遇到了一个问题。我的后台任务需要检查rss提要是否有更新,但当我运行

HttpClient hc = new HttpClient();
string result = await hc.GetString("http://url.com");
GetString方法被激发后不会发生任何事情,也不会返回,它永远不会跳到下一行。我也尝试了
BackgroundDownload
,它也像httpclient一样停止了,应该在什么时候下载

StorageFolder folder = ApplicationData.Current.TemporaryFolder;
StorageFile file = await folder.CreateFileAsync("feed.txt");
BackgroundDownloader test = new BackgroundDownloader();
DownloadOperation operation = test.CreateDownload(new Uri("https://url.com"), file);
operation.Priority = BackgroundTransferPriority.Default;
await operation.StartAsync();
我到处寻找答案,但似乎找不到答案。。。那么,如何从站点获取字符串,就像使用
hc.GetString(“”)一样

这是我的代码:

public async void Run(IBackgroundTaskInstance taskInstance)
{
    var deferral = taskInstance.GetDeferral();
    int lastSeenNews = Convert.ToInt32(Settings.GetValue("lastNews"));
    int lastNews = 0;
    HttpClient hc = new HttpClient();
    var rss = await hc.GetStringAsync("https://url.com");

    List<RSSItem> items = new List<RSSItem>();
    lastNews = items[0].id;
    if (lastSeenNews < lastNews)
    {
        int unreadNotifications = 0;
        List<RSSItem> unreadStatuses = items.Where(x => x.id > lastSeenNews).ToList();
        unreadNotifications = unreadStatuses.Count;
    }
    ToastTemplateType toastTemplate = ToastTemplateType.ToastText01;
    XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);

    XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
    toastTextElements[0].AppendChild(toastXml.CreateTextNode(Settings.GetValue("lastNews")));

    ToastNotification toast = new ToastNotification(toastXml);
    ToastNotificationManager.CreateToastNotifier().Show(toast);
    deferral.Complete();
}
public异步无效运行(IBackgroundTaskInstance taskInstance)
{
var deleral=taskInstance.getDeleral();
int lastSeenNews=Convert.ToInt32(Settings.GetValue(“lastNews”);
int lastNews=0;
HttpClient hc=新的HttpClient();
var rss=await hc.GetStringAsync(“https://url.com");
列表项=新列表();
lastNews=项目[0]。id;
如果(lastSeenNewsx.id>lastSeenNews.ToList();
unreadNotifications=未读取状态。计数;
}
ToastTemplateType toastTemplate=ToastTemplateType.ToastText01;
XmlDocument toastXml=ToastNotificationManager.GetTemplateContent(toastTemplate);
XmlNodeList toastTextElements=toastXml.GetElementsByTagName(“文本”);
toastTextElements[0].AppendChild(toastXml.CreateTextNode(Settings.GetValue(“lastNews”));
ToastNotification toast=新的ToastNotification(toastXml);
ToastNotificationManager.CreateToastNotifier().Show(toast);
延迟。完成();
}

我猜后台任务正在终止,因为异步调用了
hc.GetString()


您可以通过请求
BackgroundTaskDelay
来解决此问题-请参阅中的步骤4以获取代码示例。

我想我已经在这样做了,我已经在上面添加了run方法:)我很困惑-为什么run()方法标记为async,但我在其中没有看到任何等待调用?没有问题。嗯,如果它仍然在做同样的事情(当你跨过它之后再也不会回来),你可以试着把同样的代码放在一个“真正的”应用程序中,看看它是否会回来。您还应该打开“第一次出现异常时收到通知”以查看是否引发异常。您是否考虑过
DownloadString
可能引发异常?用try-catch包装它,看看你得到了什么…同样的,从此不再继续,很遗憾:(@Romasz这是一个虚拟URL,它不是我在我的应用程序中使用的实际URL:PYeah,对:)然而,当你尝试使用不同的URL时,它工作正常吗?我的应用程序本身使用相同的方法,工作正常:)