Как получить переменную из потока пользовательского интерфейса, находясь в рабочем потоке? - PullRequest
3 голосов
/ 15 мая 2011

Я медленно продвигаюсь к простому приложению, которое делаю: оно создает запрос, заполняет заголовки и выбирает веб-страницу для меня.Я понял, что для обновления пользовательского интерфейса (после нажатия кнопки) я должен использовать диспетчер следующим образом:

Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_onearg_s(UpdateStatus), "Sending Request...");

В этом случае у меня есть UpdateStatus (строковое сообщение), который устанавливает мой label_Status =сообщение;

Пока все хорошо.Теперь я хочу, чтобы он сначала взял ввод из текстового поля, а затем превратил его в URL-адрес, который позже будет использован для создания запроса, но как мне это сделать?Я пробовал это:

string url = Convert.ToString(Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_string_get(GetInput)));

GetInput () в этом случае просто возвращает textBox.Text;Это на самом деле не работает - он возвращает некоторые общие вещи, которые связаны с диспетчером.

Как получить переменную из текстового поля в потоке пользовательского интерфейса и получить ее в рабочем потоке с диспетчером?

Merci beacoup:)

PS.Есть очень высокая вероятность того, что я не знаю, что я делаю.Просто имейте это в виду при ответе.

Ответы [ 2 ]

1 голос
/ 15 мая 2011

Вы на правильном пути, но вам нужно использовать Invoke, а не BeginInvoke.BeginInvoke выполняет делегат асинхронно в потоке диспетчера, но вам нужно получить результат синхронно.

string url = (string)Dispatcher.Invoke(new Func<string>(GetInput));
0 голосов
/ 15 мая 2011

перед запуском потока объявите строковую переменную и присвойте ей значение из textBox, затем используйте эту переменную в вашем методе GetInput.

string myVal = myTextBox.Text;

... используйте его в своем GetInput.

...