当前位置:编程学习 > wap >>

关于 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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,