【发布时间】:2018-08-10 11:39:18
【问题描述】:
我正在做一个播放几个视频的项目。为了能够播放这些视频,我需要在应用程序通过HttpClient 从System.Net.Http 请求时获取他们的数据。一切正常,当应用处于前台时,UWP 应用会从 Internet 下载所需的信息。
一旦应用离开前台并被用户最小化,HttpClient,无论是来自 System.Net.Http 命名空间还是 Windows.Web.Http 命名空间,都不起作用。我什至尝试在那里设置一个断点,只要我继续前进,HttpClient 不会响应await client.GetAsync() 方法并停留在那里而不返回任何结果,除非您再次激活应用程序然后它返回任何值。我不能使用BackgroundTasks,因为他们需要Triggers,但我需要按需访问数据。
我还阅读了this 的文章描述请求ExtendedExecutionState,但结果仍然相同。当应用收到播放项目列表的请求时,我会请求此状态。即使得到Allowed 的结果,HttpClient 的行为也与上述相同。
是否有任何方法可以在请求时执行与互联网相关的查询并获取一些信息?
我执行的从互联网访问数据的代码是:
public static async Task<string> GetResponseDataFromAPI(string apiRequestUrl, CancellationTokenSource cts = default)
{
cts = cts ?? new CancellationTokenSource(TimeSpan.FromSeconds(20));
try
{
var responseData = await AuthRequestHelper.globalHttpClient.GetAsync(apiRequestUrl, cts.Token);
var result = await responseData.Content.ReadAsStringAsync();
return result;
}
catch (Exception ex)
{
INotifyHelper.iNotifyObject.IsVideoLoading = false;
INotifyHelper.iNotifyObject.IsDataLoading = false;
// show error
return "{ \"error\": {\"code\": " + $"\"{ex.HResult}\", \"message\": \"{ex.Message}\"" + "} }";
}
}
然后分析返回的值以从中获取所需的数据。
请求ExtendedExecutionSession执行的代码是:
public static async void RequestBackgroundExtendedExecution()
{
using (var session = new ExtendedExecutionSession())
{
session.Reason = ExtendedExecutionReason.Unspecified;
session.Description = "Background Playlist Playback";
session.Revoked += Session_Revoked;
if (await session.RequestExtensionAsync() is ExtendedExecutionResult result)
{
if (result == ExtendedExecutionResult.Denied)
{
// show user that background playlist playback will not be possible
}
}
}
}
在最小化状态下是否可以执行任何请求的操作?非常感谢您指出正确方向的一点帮助。谢谢
【问题讨论】:
-
几周前有一个关于此的话题stackoverflow.com/questions/47339719/… 转而您可以告诉链接器您的uwp 应用程序仅适用于PC/Windows。在那种模式下,可以绕过它见blogs.msdn.microsoft.com/mvpawardprogram/2018/01/30/…