Приложение Windows Phone, ссылающееся на dll (другой проект библиотеки классов). В dll существует асинхронный веб-запрос для запроса сервера и анализа ответа.
Событие нажатия кнопки на главной странице приложения WinPhone вызывает асинхронный метод ссылочной библиотеки DLL. Метод обратного вызова вызывает событие, когда ответ получен и проанализирован. Теперь, когда возникает событие, я анализирую объект до уровня HTTPcommunication. Просто, как показать окно сообщения с таким результатом в пользовательском интерфейсе, когда модуль HTTPcommunication завершил свою работу.
public class HTTPRequester
{
public delegate void ResponseReceievedAndParsedDelegate(HTTPRequester eventRaiser, object result);
public event ResponseReceievedAndParsedDelegate ResponseReceivedAndParsed;
public void GetUserInformation(string userid)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Credentials = new NetworkCredential("uid", "pwd");
request.Method = "GET";
request.Accept = "application/json";
object data = new object();
RequestState state = new RequestState(request, data);
IAsyncResult asr = request.BeginGetResponse(new AsyncCallback(RequesterCallback), state);
}
void RequesterCallback(IAsyncResult result)
{
RequestState state = (RequestState)result.AsyncState;
WebRequest request = (WebRequest)state.Request;
HttpWebResponse response =(HttpWebResponse)request.EndGetResponse(result);
Stream s = response.GetResponseStream();
StreamReader readStream = new StreamReader(s);
string dataString = readStream.ReadToEnd();
response.Close();
s.Close();
readStream.Close();
HTTPResponseParser grp = new HTTPResponseParser();
UserInfo ui = grp.ParseUserInformation(dataString );
state.Response = ui;
if (ResponseReceivedAndParsed != null)
{
ResponseReceivedAndParsed(this, ui);
}
}
}
(asynchronous)
MainUI ------> HTTCommunicator ---------> Сервер
MainUI HTTPCommunicator <-------- Сервер </p>
Моя проблема заключается в том, как заставить отсутствующую ссылку передать ответ от HTTPCommunicator обратно в главный интерфейс.
Надеюсь, я вас не смутил, ребята.
Может ли кто-нибудь указать на пример кода, если это можно сделать с помощью Dispatcher.