Windows phone 7 当线程正在运行时,BackKey不工作。为什么?
PageA已导航到PageB 有一个线程正在为HttpWebRequest运行。 线程运行时,Back键无效。 PageB代码:Windows phone 7 当线程正在运行时,BackKey不工作。为什么?,windows-phone-7,Windows Phone 7,PageA已导航到PageB 有一个线程正在为HttpWebRequest运行。 线程运行时,Back键无效。 PageB代码: protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) { Debug.WriteLine("OnNavigatedTo"); //base.OnNavigatedTo(e); DoWork();
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
Debug.WriteLine("OnNavigatedTo");
//base.OnNavigatedTo(e);
DoWork();
}
void DoWork()
{
t = new Thread(new ThreadStart(() =>
{
request = WebRequest.Create("http://www.google.com") as HttpWebRequest;
request.BeginGetResponse(new AsyncCallback(AsyncBack), request);
}));
t.IsBackground = true;
t.Start();
}
void AsyncBack(IAsyncResult ias)
{
HttpWebRequest req = (HttpWebRequest)ias.AsyncState;
using (HttpWebResponse res = req.EndGetResponse(ias) as HttpWebResponse)
{
this.Dispatcher.BeginInvoke(() =>
{
this.PageTitle.Text = res.ContentLength.ToString();
long length = res.ContentLength;
for (long i = 0; i < length; i++)
{
//here imitate a long time for working
Debug.WriteLine(i);
if (i == length)
{
break;
}
}
Debug.WriteLine(res.ContentLength);
});
}
}
受保护的覆盖无效OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
Debug.WriteLine(“OnNavigatedTo”);
//基地。导航到(e);
销钉();
}
无效销钉()
{
t=新线程(新线程开始(()=>
{
request=WebRequest.Create(“http://www.google.com)作为HttpWebRequest;
BeginGetResponse(新的AsyncCallback(AsyncBack),request);
}));
t、 IsBackground=true;
t、 Start();
}
无效异步返回(IAsyncResult ias)
{
HttpWebRequest req=(HttpWebRequest)ias.AsyncState;
使用(HttpWebResponse res=req.EndGetResponse(ias)作为HttpWebResponse)
{
this.Dispatcher.BeginInvoke(()=>
{
this.PageTitle.Text=res.ContentLength.ToString();
长长度=res.ContentLength;
用于(长i=0;i
在方法AsyncBack()完成之前,Back键无效。
“后退键无效”是指在方法AsyncBack()完成之前,当您触摸后退键时,应用程序不会返回到PageA。
为什么?帮帮我?你他妈的为什么要在自定义线程中包装异步请求?这一点都没有意义
同样,您的问题也没有多大意义,但最有可能的错误是与试图通过调用操作的请求有关。调度程序位于错误的页面。在您的代码中,您会长时间阻止UI线程,因此您无法返回页面,因为它也发生在UI线程上,只会将无法在UI上执行的代码放入调度程序中
void DoWork()
{
HttpWebRequest request = WebRequest.Create("http://www.googl.com") as HttpWebRequest;
request.BeginGetResponse(new AsyncCallback(AsyncBack), request);
}
void AsyncBack(IAsyncResult ias)
{
HttpWebRequest req = (HttpWebRequest)ias.AsyncState;
using (HttpWebResponse res = req.EndGetResponse(ias) as HttpWebResponse)
{
this.Dispatcher.BeginInvoke(() =>
{
this.PageTitle.Text = res.ContentLength.ToString();
});
long length = res.ContentLength;
for (long i = 0; i < length; i++)
{
long i_ = i;
//here imitate a long time for working
Thread.Sleep(10);
this.Dispatcher.BeginInvoke(() =>
{
this.PageTitle.Text = i_.ToString();
});
if (i == length)
{
break;
}
}
Debug.WriteLine(res.ContentLength);
}
}
void DoWork()
{
HttpWebRequest请求=WebRequest.Create(“http://www.googl.com)作为HttpWebRequest;
BeginGetResponse(新的AsyncCallback(AsyncBack),request);
}
无效异步返回(IAsyncResult ias)
{
HttpWebRequest req=(HttpWebRequest)ias.AsyncState;
使用(HttpWebResponse res=req.EndGetResponse(ias)作为HttpWebResponse)
{
this.Dispatcher.BeginInvoke(()=>
{
this.PageTitle.Text=res.ContentLength.ToString();
});
长长度=res.ContentLength;
用于(长i=0;i
{
this.PageTitle.Text=i_u2;.ToString();
});
如果(i==长度)
{
打破
}
}
Debug.WriteLine(res.ContentLength);
}
}
Back Key无效是什么意思?“后退”按钮在完成之前不会执行任何操作,然后再执行操作?它什么都没做?它抛出了一个异常?etc.“后退键无效”是指在方法AsyncBack()完成之前,当您触摸后退键时,应用程序不会返回到PageA。WebRequest处于线程中。t=new Thread(new ThreadStart(()=>{request=WebRequest.Create(“)as HttpWebRequest;request.BeginGetResponse(new AsyncCallback(AsyncBack),request);});异步请求不需要线程,这就是全部该死的想法!现在,我更新方法[DoWork]根据您的建议。如下所示:void DoWork(){request=WebRequest.Create(“)as HttpWebRequest;request.BeginGetResponse(new AsyncCallback(AsyncBack),request);}但是,问题仍然存在!很抱歉我用你的代码测试我的项目,但问题出在哪里!发生!您也可以在项目中测试代码。。。。。谢谢这是我测试项目中的代码,运行良好。请注意,循环的中的Debug.Writeline(i)
大大降低了应用程序的速度,所以我删除了它。请严格测试我提供的代码,它应该可以工作