Тупик в Windows Phone 8 - поток пользовательского интерфейса

У меня есть два процесса, запущенных в моем потоке пользовательского интерфейса. Однако, когда я запускаю первый, с функциональностью BeginGetStream, он входит в цикл и ожидает его выполнения и возвращает результат, когда вы будете готовы, но во втором прогоне, через функциональность BeginGetResponse, этот «умирает» там, и программа не продолжать и не возвращает мне нужное значение. В этих процессах используйте IasynResult.

Я пробовал:

  • Преобразовать в задачу (Task.Run)

  • Назначьте процессу новый поток (Thread x = new Thread ())

  • Установите параметр ConfigureAwait (ConfigureAwait (continueOnCapturedContext: false), ConfigureAwait (false));

  • Преобразуйте в методы asyncronos и примените "ожидание"

  • Используйте 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
    {
    }

... Не знаю, что еще попробовать ... Кто-нибудь может мне помочь.

Спасибо.


person fipcurren88    schedule 13.04.2015    source источник
comment
Не могли бы вы дать код для воспроизведения проблемы? Сложно понять только по описанию   -  person Kevin Gosse    schedule 13.04.2015
comment
Привет, конечно. Редактирую сейчас. Спасибо   -  person fipcurren88    schedule 14.04.2015


Ответы (1)


Любому HttpWebRequest требуется бесплатный поток пользовательского интерфейса для выполнения запроса, но вы блокируете поток пользовательского интерфейса вызовом Task.WaitAny ().

Вы никогда не должны блокировать поток пользовательского интерфейса, особенно для ожидания результата веб-запроса!

person Viacheslav Smityukh    schedule 14.04.2015
comment
Хорошо. Правильно. Но мне нужен ответ на первый запрос, чтобы перейти ко второму запросу. Однако мне нужен ответ на второй запрос, чтобы продолжить программу. Я удалил Task.WaitAny (); но все равно не работает. - person fipcurren88; 14.04.2015