Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows phone 7 当线程正在运行时,BackKey不工作。为什么?_Windows Phone 7 - Fatal编程技术网

Windows phone 7 当线程正在运行时,BackKey不工作。为什么?

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();

PageA已导航到PageB 有一个线程正在为HttpWebRequest运行。 线程运行时,Back键无效。 PageB代码:

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)
大大降低了应用程序的速度,所以我删除了它。请严格测试我提供的代码,它应该可以工作