Ответ возникает в отдельной теме. Winforms не являются многопоточными, поэтому вам придется отправлять вызов в тот же поток, что и форма.
Вы можете сделать это, используя внутренний контур сообщения в окне. К счастью, .NET предоставляет способ сделать это. Для этого вы можете использовать методы Invoke или BeginInvoke элемента управления. Первый блокирует текущий поток, пока поток пользовательского интерфейса не завершит вызываемый метод. Позднее делает это асинхронно. Если нет очистки, вы можете использовать последнюю, чтобы «стрелять и забывать»
Для этого в любом случае вам нужно создать метод, который вызывается BeginInvoke, и вам понадобится делегат указать на этот метод.
Подробнее см. В разделе Control.Invoke и Control.BeginInvoke в MSDN.
Там есть пример по этой ссылке: https://msdn.microsoft.com/en-us/library/zyzhdc6b(v=vs.110).aspx
Update: Как я просматривающие мой профиль, потому что я забыл я имел счет здесь - я заметил это, и я хотел бы добавить: Все, что прошлое 3.5 или когда они значительно изменились модель асинхронной резьбы здесь находится вне моей рулевой рубки. Я профессионально, и пока я все еще люблю ремесло, я не следую за каждым продвижением. То, что я могу вам сказать, это должно работать во всех версиях .NET, но это может быть не абсолютная вершина производительности 4.0 и выше, или в эмуляции Mono/Winforms, если это все еще вокруг. С яркой стороны, любой удар обычно не будет плохим вне серверных приложений, и даже внутри, если threadpool делает свою работу. Поэтому в большинстве случаев не сосредотачивайтесь на усилиях по оптимизации, и, скорее всего, вы будете работать на «урезанных» платформах, где вы видите такие вещи, как мобильные пакеты C#, хотя мне бы хотелось убедиться, и большинство из них не запускают winforms, но некоторые спиновые циклы сообщений, и это тоже работает. В сущности, это не лучший ответ для новейших платформ в каждом последнем случае. Но он может быть более портативным в правильном случае. Если это помогает одному человеку избежать ошибки дизайна, тогда стоит потратить время, чтобы написать это. =)
Что такое параметр IAsyncResult во втором методе? Результат вызова request.BeginGetResponse()? – demas
Как я вижу, это ничего не меняет. Вот полный код http://pastebin.com/trvq1qza. Окна графического интерфейса пользователя замораживаются в строке 18. – demas
@demas i обновленный ответ. что работает на меня без замерзания –