Я создал приложение службы WCF и в основном ничего не менял, кроме имен, контракт по умолчанию существует и содержит метод GetData(Int32)
, который возвращает строку..NET WCF сгенерированная задача, похоже, фактически не выполняется на другом потоке
Затем я создал WPF клиента приложения нацеливания .NET FW 4.5 так, где я добавить ссылку на службу к указанной службе, я могу выбрать, чтобы включить задачи на основе асинхронного варианта методов контракта в сгенерированном клиенте услуг.
Теперь, когда я пытаюсь использовать службу, как это:
using (var client = new RhaeoServiceClient())
{
client.GetDataAsync(17).ContinueWith(t => MessageBox.Show(t.Result));
MessageBox.Show("inb4");
}
При выполнении из кнопок мыши обработчика, окна киосков, кнопка остается нажатой в течение секунды или около того, а затем "inb4"
сообщение показывает, так мне кажется, что задача выполняется на основном потоке и ждет сети, таким образом, замораживает пользовательский интерфейс.
"inb4"
не отображается сразу после нажатия кнопки, кажется, что ждать после выполнения задачи, как я уже сказал, секунды или два. После того, как "inb4"
показывает, следующее окно сообщения с результатом также показывает, но что смешно для меня, то следующее окно сообщения не ждет меня, чтобы закрыть первый, он просто появляется над первым почти сразу после первого показа ,
Так что это сбивает с толку, потому что это похоже на то, что код продолжения фактически запускается в другом потоке и не волнует, что основной поток блокируется первым полем сообщения. Но как он отображает окно сообщения, которое может отображаться только из потока пользовательского интерфейса (правильно?)?
И почему первое окно сообщения ждет после выполнения задачи, затем показывается, а затем закрывается следующей, не закрывая?
Perfect. Большое спасибо! – user2846145