死锁Windows Phone 8 - UI线程

时间:2015-04-13 18:47:43

标签: c# windows-phone-8 asynchronous deadlock ui-thread

我的UI线程上运行了两个进程。 但是,当我运行第一个,使用BeginGetStream功能时,它进入循环并等待它的执行并在你准备就绪时返回结果,但是在第二次运行中,通过BeginGetResponse功能,这个“死”在那里,程序做没有继续,并没有回报我想要的价值。在这些过程中使用IasynResult。

我试过了:

  • 转换为任务(Task.Run)

  • 为进程分配一个新线程(Thread x = new Thread())

  • 设置参数ConfigureAwait(ConfigureAwait( continueOnCapturedContext:false),ConfigureAwait(false));

  • 转换为asyncronos方法并应用“await”

  • 使用AutoResetEvent等待进程完成,不要继续。

  • 放置线程进入睡眠状态(Thread.Sleep)

  • 使用Thread.Start,Thread.Join

一些代码示例:

第一次请求:

    int number = 123;
    1Request.Headers["Teste"] = string.Format("Teste{0}", number);
    IAsyncResult AsyncronousResult= null;

        try
        {
               await Task.Run(() => 1Request.BeginGetRequestStream(
               (IAsyncResult result) =>
               {
                   AsyncronousResult= result;
                   //handle.Set();
               }, 1Request));

            Task.WaitAny();

        }
        catch (Exception) { }

第二次请求:

    HttpWebRequest 2request = (HttpWebRequest)AsyncronousResult.AsyncState;
    IAsyncResult AsyncronousResult = null;

     Try 
    {
        await Task.Run(() => 2request.BeginGetResponse(
            (IAsyncResult result) =>
            {
                AsyncronousResult = result;

            }, 2request));
        Task.WaitAny();
    }

     catch
    {
    }

......我不知道还有什么可以尝试...... 有人可以帮助我。

谢谢。

1 个答案:

答案 0 :(得分:1)

任何HttpWebRequest都需要一个免费的UI线程来完成请求,但是你通过调用Task.WaitAny()来阻止UI线程。

您必须永远不要阻止UI线程,尤其是等待Web请求的结果!