Я думаю, вы не понимаете, как работает асинхронный код и как выполнение обратного вызова вписывается в код вызова.
В пределах GetRequestStreamCallback
, после вызова request.BeginGetResponse
метод будетпродолжайте выполнение, а в вашем примере просто завершите.
Неизвестно, когда (или даже если) будет выполняться ResponseCallback
или что произойдет в потоке пользовательского интерфейса, когда это произойдет.Из-за этого ResponseCallback
будет выполняться в другом потоке.
Возможно, чтобы в обратном вызове выполнялся код в потоке пользовательского интерфейса (который вам потребуется, чтобы взаимодействовать с пользовательским интерфейсом),используя Dispatcher.BeginInvoke
.Однако вы не можете выполнить это в контексте другого метода.
Хотя я бы не рекомендовал этого, вы можете взглянуть на это обсуждение по поводу появления обратного вызовавыполнять синхронно.Это заблокирует ваш поток пользовательского интерфейса, хотя и НЕ рекомендуется.