none
windows phone 不存在多线程?关于Http post 的问题 RRS feed

  • 问题

  • 代码:

            public ResultData PostResult(MemoryStream stream)
            {
                //string url = SERVICE_URL + "test/";
                string hello = Trace(stream);
                stream.Position = 0;            
                HttpWebRequest request = HttpWebRequest.CreateHttp(SERVICE_URL + "authterm/?termid=1000&digest=1234");
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = stream.Length;
                request.Method = "POST";
                request.AllowReadStreamBuffering = true;
    
                try
                {
                    request.BeginGetRequestStream((asyncResult) =>
                    {
                        byte[] header = System.Text.Encoding.UTF8.GetBytes(hello);
                        HttpWebRequest postRequest = asyncResult.AsyncState as HttpWebRequest;
                        Stream streamResult = postRequest.EndGetRequestStream(asyncResult);
    
                        //得到响应流
                        streamResult.Write(stream.ToArray(), 0, (int)stream.Length);
                        //streamResult.Write(header, 0, header.Length);
                        streamResult.Flush();
                        streamResult.Close();
    
                        Thread getThread = new Thread(new ParameterizedThreadStart(GetResponse));
                        getThread.Start(postRequest);
                        
                    }, request);
                    _PostDoned.WaitOne();                                
    
                    return new ResultData();
                }
                catch (WebException ex)
                {
                    return null;
                }
            }
    
            private void GetResponse(object param)
            {
                HttpWebRequest postRequest = param as HttpWebRequest;
                postRequest.BeginGetResponse((asyncPostResult) =>
                {
                    try
                    {
                        HttpWebRequest webRequest = (HttpWebRequest)asyncPostResult.AsyncState;
                        HttpWebResponse webResponse = (HttpWebResponse)webRequest.EndGetResponse(asyncPostResult);
    
                        Stream responseStream = webResponse.GetResponseStream();
                        DataContractJsonSerializer rspDataSerializer = new DataContractJsonSerializer(typeof(ResultData));
                        Result = (ResultData)rspDataSerializer.ReadObject(responseStream);
                        _PostDoned.Set();                                                
                    }
                    catch (Exception ex)
                    {
                        throw new Exception();
                    }
                }, postRequest);
            }

    PostResult函数执行到 _PostDone.Wait();的时候就阻止了GetResponse函数(另外一个线程)的执行,是不是windows phone 不支持多线程呢
    2013年5月22日 20:31

全部回复

  • 老实说,WP是可以多任务之间切换的,只是它的后台并不像android 和iPhone 那样明显。长按返回键手机会进入一个类似于“任务管理器”的窗口,那里你可以浏览到你所打开的全部应用。只是这算不算是多线程我就不知道了。如果去研究一下软件的推送机制,说不定会有些帮助。
    2013年5月23日 8:29
  • 首先要明确WP是同时只运行一个程序的系统(那些有后台代理的程序除外)。

    也就是说,如果你的程序在运行的情况下,你的程序与Win32桌面应用的线程模型没什么区别,一个进程,多个线程。

    一旦你的程序被放置到后台,那你程序的进程及其所有线程都会变成挂起状态。

    2013年5月25日 1:50