关于 windows phone background task webrequest 的疑问
最近在写一个 background task webrequest的功能,用来定时向网络请求数据来更新,但发现启动 后台任务 时,webrequest,每次只能使用一次,我需要每次启动后台任务时,多次使用webrequest来获取网络数据,然后把数据更新到磁贴和数据库中,但是每次都是只更新第一个数据,然后后台任务就不再启动,查看后台任务列表,后台任务功能是开启的,一直找不出那里的问题,请问有没有朋友遇到同样的问题或者明白怎么解决这个问题的呢,请指点一下,弄了几天都不行 Windows Phone background task webrequest --------------------编程问答-------------------- 启动的时候你不是全部发起请求的? --------------------编程问答-------------------- background task 有一堆限制的。 --------------------编程问答-------------------- 你的“每次启动后台任务”是什么意思?后台代理大概每30分钟执行一次,每次执行的时限是25秒,
如果你需要链接很多服务器资源,你可以尝试在后台代理执行的时候多次联网,
这个是可以的。 --------------------编程问答-------------------- --------------------编程问答-------------------- 建议贴一下代码 --------------------编程问答-------------------- public static string PERIODICTASKNAME = "PeriodicTask_Express";
protected override void OnInvoke(ScheduledTask task)
{
//TODO: Add code to perform your task in background
/*
ShellToast toast = new ShellToast();
toast.Title = "Good: ";
toast.Content = "Get the Service!";
toast.Show();*/
/* ScheduledActionService.LaunchForTest(PERIODICTASKNAME, TimeSpan.FromSeconds(30));*/
if ((task is PeriodicTask) && (task.Name == PERIODICTASKNAME)) // && checkDateTime()
{
//设置下次代理执行时间
ScheduledActionService.LaunchForTest(PERIODICTASKNAME, TimeSpan.FromSeconds(10));
//执行API
updateSignData();
}
else
{
//如果不是指定的task,则不执行
ScheduledActionService.LaunchForTest(PERIODICTASKNAME, TimeSpan.FromSeconds(10));
NotifyComplete();
}
}
private void updateSignData()
{
//执行线程内容操作
/*
* 查询数据库内容,
* 找出需要更新的快递单,然后用webrequest或者webclient请求数据更新,
* 然后把数据和原来的作对比,如果数据条数增加,就把新增加的数据写入到数据库。并且把新增加的数据条数写入到数据库中
*/
/* 取得所有单号*/
List<ExpressSignTable> lstUpdateSign = new List<ExpressSignTable>();
MainPageClass GetListboxClass = new MainPageClass();
lstUpdateSign = GetListboxClass.set_NeedUpdateDataSign();
foreach (ExpressSignTable c in lstUpdateSign)
{
/* 遍历每个单号数据,并且联网更新数据 */
SearchSignClass(c.ExpressLtdid, c.ExpressSignID);
}
}
private void SearchSignClass(string ltdNameid, string signid)
{
try
{
string url = "http://api.ickd.cn/?com=" + ltdNameid + "&nu=" + signid + "&id=0997E5F7CFA21823546803D58BA5C5AB&type=json&encode=utf8&ord=desc";
var webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "GET";
try
{
webRequest.BeginGetResponse(new AsyncCallback(HandleResponse), webRequest);
}
catch
{
}
}
catch
{
}
}
public void HandleResponse(IAsyncResult asyncResult)
{
try
{
HttpWebRequest httpRequest = null;
HttpWebResponse httpResponse = null;
string _result = string.Empty;
try
{
httpRequest = (HttpWebRequest)asyncResult.AsyncState;
httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(asyncResult);
using (var reader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8))
{
_result = reader.ReadToEnd();
reader.Close();
}
}
catch
{
}
finally
{
if (httpRequest != null) httpRequest.Abort();
if (httpResponse != null) httpResponse.Close();
}
JObject json = JObject.Parse(_result);
AllExpressSignClass allExpressSign = new AllExpressSignClass();
allExpressSign.SignStatus = (string)json["status"];
allExpressSign.ltdName = (string)json["expTextName"];
allExpressSign.ltdNameID = (string)json["expSpellName"];
allExpressSign.SignID = (string)json["mailNo"];
JArray array = JArray.Parse(json["data"].ToString());
List<string> lst = new List<string>();
if (allExpressSign.SignStatus != "0")
{
List<SignDataText> signData = new List<SignDataText>();
foreach (var item in array)
{
string timestring = item["time"].Value<string>();
string contxt = item["context"].Value<string>();
signData.Add(new SignDataText { time = timestring, data = contxt });
}
List<ExpressDataTable> lstData = new List<ExpressDataTable>();
lstData = LlinqHelper.GetExpressData();
int signDataAmount = 0;
foreach (SignDataText data in signData)
{
var query = from c in lstData where c.SignID == allExpressSign.SignID && c.SignTime == data.time && c.SignData == data.data select c;
if (query.ToList().Count == 0)
{
//没有这条数据,插入到数据库。同时更新数纪录+1;
signDataAmount++;
LlinqHelper.AddExpressData(allExpressSign.SignID, data.data, data.time);
}
else
{
}
}
//更新 signtable表的数据
var query2 = LlinqHelper.GetExpressSignAbout(allExpressSign.SignID);
string note = query2.SignNote.ToString();
LlinqHelper.UpdateExpressSign(allExpressSign.SignID, allExpressSign.ltdNameID, allExpressSign.ltdName, allExpressSign.SignStatus, note, signDataAmount.ToString());
if (signDataAmount >0)
{
Pin_Click(allExpressSign.SignID);
}
}
else
{
}
NotifyComplete();
}
catch
{
}
finally
{
}
} --------------------编程问答-------------------- 现在的后台任务,并不能正常运行,一直找不出原因在那里 --------------------编程问答-------------------- 不是很懂,但好像不是这样!
补充:移动开发 , Windows Phone