приостановка обновления текстового поля до выполнения http-вызова WP7 - PullRequest
0 голосов
/ 15 декабря 2011

поэтому у меня есть класс request, у которого есть метод call, который делает http-запрос

в моем основном классе, когда пользователь нажимает кнопку, создается класс req и метод call вызывает HTTP-запрос.

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

Я пытался вставить это в метод обработчика события нажатия кнопки:

        req.call(textBox1.Text);
        Dispatcher.BeginInvoke(() =>
        {
            //req is the class instance, outputMessage is the string holds 
            //the result of the http request
            //resultTextBlock is the one I wanna update with the result
            while (req.outputMessage == "none") ;
            resultTextBlock.Text = req.outputMessage;
        });

в обработчике события нажатия кнопки, но затем приложение переходит в бесконечный цикл и никогда не завершается, запрос http занимает доли секунды, если это имеет значение

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

1 Ответ

1 голос
/ 15 декабря 2011

Требуется обратный вызов из запроса после его завершения.Это поддерживается, т. Е. WebClient:

using (WebClient wc = new WebClient())
{
    wc.DownloadStringAsync(new Uri("http://stackoverflow.com"), null);
    wc.DownloadStringCompleted += (s, e) =>
    {
        string outputMessage = e.Result;
        Dispatcher.BeginInvoke(() =>
        {
                resultTextBlock.Text = outputMessage;

        });
    };
}

Edit:

Вы можете передать делегат вашему классу req, который вы передадите результатстрока (также обратите внимание, что правила именования должны быть прописными), поэтому измените сигнатуру метода следующим образом:

public void Call(string url, Action<string> notifyCompletion)
{

 //once completed:
  notifyCompletion(result);
}

И измените код вызова на:

Req myRequest = new Req();
myRequest.Call(textBox1.Text, s => 
{
   Dispatcher.BeginInvoke(() =>
   {
       resultTextBlock.Text = outputMessage;
   });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...