异步调用如何与UI通信

时间:2010-09-15 15:34:56

标签: c# silverlight asynchronous

引用dll的Windows Phone应用程序(另一个类库项目)。在dll中有一个异步webrequest来请求服务器并解析响应。

单击WinPhone应用程序主页面中的按钮事件调用引用的dll的异步方法。回调方法在接收和解析响应时引发事件。现在当事件提升时,我将解析对象直到HTTP通信层。简单地说,当HTTPCommunication模块完成其工作时,如何在UI中显示带有此结果的消息框。

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< --------服务器

我的问题是如何使缺少的链接将HTTPCommunicator的响应传递回主UI。

希望我没有混淆你们。 任何人都可以指向一些代码示例,如果可以使用Dispatcher完成。

1 个答案:

答案 0 :(得分:0)

在UI cerate方法中:

private void HandleMessage(HTTPRequester eventRaiser, object result)
{
   UserInfo ui = (UserInfo)result;
   //show message
}

创建HttpRequester附加到其事件后:

HttpRequester xxx = new ...
xxx.ResponseReceivedAndParsed += new ResponseReceievedAndParsedDelegate(HandleMessage);