WIndows Phone 8.1 的异步方法未在后台模式下调用
Async Method is not calling in Background mode for WIndows Phone 8.1
我为 windows phone8.1 silver light 网络服务应用程序创建了后台调度程序。当它调用异步方法时,它不会固定服务器。没有后台代理,Web 服务工作正常,但在后台调度程序中它不工作。任何人都可以指导 me.The 以下是我的代码。
1) WebservicePortTypeClient client = null;
2) client = new WebservicePortTypeClient();
3) client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
4) client.MMCompleted += new EventHandler<MMCompletedEventArgs>(returnmlp);
在步骤--3 时,它在日志中抛出以下语句。
程序“[3436] BACKGROUNDTASKHOST.EXE”已退出,代码为 1 (0x1)。
程序“[2828] AgHost.exe”已退出,代码为 0 (0x0)。
如有任何建议,我们将不胜感激。
您应该使用延迟来指示后台任务何时完成。否则 OS 可能会提前终止后台线程。你会这样做:
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
WebservicePortTypeClient client = null;
client = new WebservicePortTypeClient();
var result = await client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
//Do something with result.
//Add this after your task is complete.
deferral.Complete();
}
更多信息可以在这里找到:https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx(参考点 4)
对于 Windows Phone 8 个样式代理:
将方法签名设为 "protected async override..." 并为异步方法使用 await 关键字。
protected async override void OnInvoke(ScheduledTask task)
{
WebservicePortTypeClient client = null;
client = new WebservicePortTypeClient();
var result = await client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
//Do something with result
NotifyComplete();
}
我使用以下代码实现了异步 Web 服务调用。
int intResult = await TaskOfTResult_MethodAsync();
async Task<int> TaskOfTResult_MethodAsync()
{
1) WebservicePortTypeClient client = null;
2) client = new WebservicePortTypeClient();
3) client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
**await Task.Delay(TimeSpan.FromSeconds(20));**
4) client.MMCompleted += new EventHandler<MMCompletedEventArgs>(returnmlp);
}
我为 windows phone8.1 silver light 网络服务应用程序创建了后台调度程序。当它调用异步方法时,它不会固定服务器。没有后台代理,Web 服务工作正常,但在后台调度程序中它不工作。任何人都可以指导 me.The 以下是我的代码。
1) WebservicePortTypeClient client = null;
2) client = new WebservicePortTypeClient();
3) client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
4) client.MMCompleted += new EventHandler<MMCompletedEventArgs>(returnmlp);
在步骤--3 时,它在日志中抛出以下语句。
程序“[3436] BACKGROUNDTASKHOST.EXE”已退出,代码为 1 (0x1)。 程序“[2828] AgHost.exe”已退出,代码为 0 (0x0)。
如有任何建议,我们将不胜感激。
您应该使用延迟来指示后台任务何时完成。否则 OS 可能会提前终止后台线程。你会这样做:
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
WebservicePortTypeClient client = null;
client = new WebservicePortTypeClient();
var result = await client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
//Do something with result.
//Add this after your task is complete.
deferral.Complete();
}
更多信息可以在这里找到:https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx(参考点 4)
对于 Windows Phone 8 个样式代理:
将方法签名设为 "protected async override..." 并为异步方法使用 await 关键字。
protected async override void OnInvoke(ScheduledTask task)
{
WebservicePortTypeClient client = null;
client = new WebservicePortTypeClient();
var result = await client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
//Do something with result
NotifyComplete();
}
我使用以下代码实现了异步 Web 服务调用。
int intResult = await TaskOfTResult_MethodAsync();
async Task<int> TaskOfTResult_MethodAsync()
{
1) WebservicePortTypeClient client = null;
2) client = new WebservicePortTypeClient();
3) client.MMAsync(objlog.Stringify(), valueacccoundid.ToString(), valuePushToken.ToString(), "version14");
**await Task.Delay(TimeSpan.FromSeconds(20));**
4) client.MMCompleted += new EventHandler<MMCompletedEventArgs>(returnmlp);
}