Блокировка с помощью задачи? - PullRequest
3 голосов
/ 09 декабря 2011

Я пытаюсь использовать задачи в своем приложении следующим образом:

Task test;
test = Task.Factory.StartNew(() => general.Login(loginName, password));
MyTextBox.Text = "test text";

Это будет поток пользовательского интерфейса, который делает этот вызов, и мне нужно, чтобы он был заблокирован до тех пор, пока рабочий поток не вернется из службы, но я не хочу, чтобы пользовательский интерфейс зависал.

Я мог бы использовать ContinueWith, но это разделит мой метод входа в систему, и это усложнит выполнение. Мне также нужен основной поток пользовательского интерфейса для запуска остальной части кода в этом методе.

Как мне решить эту проблему?

Ответы [ 2 ]

8 голосов
/ 09 декабря 2011

Это именно та проблема, которую решает асинхронность в C # 5.На данный момент вы должны разделить код.Это боль, но так оно и есть.(Между прочим, ваше описание слегка отклонено - вы не хотите заблокировать поток пользовательского интерфейса ... вы хотите "не выполнять вторую часть вашей логики", пока рабочий поток не вернется.совсем то же самое :) (Вы также можете отключить некоторые другие биты пользовательского интерфейса, но мы не можем сказать наверняка.)

Стоит начать работу с функцией асинхронности - см. Асинхронная домашняя страница Visual Studio для большого количества ресурсов.

0 голосов
/ 09 декабря 2011

Невозможно дождаться потока, не заблокировав ожидающий поток.Что вы можете сделать, это что-то вроде:

fire task
do some other task
wait for task  // hopefully the task finished by now
...