Silverlight 如何从HttpWebRequest更新UI?

Silverlight 如何从HttpWebRequest更新UI?,silverlight,windows-phone-7,httpwebrequest,httpwebresponse,Silverlight,Windows Phone 7,Httpwebrequest,Httpwebresponse,在我的Mainpage.xaml.cs文件中,我有一个函数,用于创建另一个类的实例,并尝试使用HttpWebRequest从该实例下载网页。问题是,一旦我成功下载了网页,我就无法将其发送回主UI线程。我尝试使用Deployment.Current.Dispatcher.BeginInvoke将网页发送回我正在等待的文本块,但当我尝试时,我收到一个错误,告诉我无法从其他类访问文本块。有没有办法在两个线程之间传递数据而不使用LocalStorage 编辑:代码如下: 主页: private void

在我的
Mainpage.xaml.cs
文件中,我有一个函数,用于创建另一个类的实例,并尝试使用HttpWebRequest从该实例下载网页。问题是,一旦我成功下载了网页,我就无法将其发送回主UI线程。我尝试使用
Deployment.Current.Dispatcher.BeginInvoke
将网页发送回我正在等待的文本块,但当我尝试时,我收到一个错误,告诉我无法从其他类访问文本块。有没有办法在两个线程之间传递数据而不使用LocalStorage

编辑:代码如下:

主页:

private void button1_Click(object sender, RoutedEventArgs e)
    {
        Member m = new Member(name, id);
    }
customClass.DownloadPage((result) =>
{
    textBlock.Text = result;
},
(exception) =>
{
    MessageBox.Show(exception.Message);
});
成员类别:

public Member(String Member, String API)
    {
        APIKey = API;
        MemberName = Member;
        this.super = super;
        DoSend(method, string, "", null);
    }

public void DoSend(string method, string url, string body, string mimetype)
    {
        if (WebRequest.RegisterPrefix("https://",System.Net.Browser.WebRequestCreator.ClientHttp)) {
            HttpWebRequest request = WebRequest.Create(makeURI(url)) as HttpWebRequest;

        request.Method = method;
        request.Headers["X-NFSN-Authentication"] = MakeAuthHeader(url,body);
        if (body != "")
        {
            byte[] bodyData = Encoding.UTF8.GetBytes(body);
            request.ContentType = mimetype;
            //Stuff Should Happen Here
        }

        else
            doStuff(request);
        }

public void doStuff(HttpWebRequest httpReq)
    {
        httpReq.BeginGetResponse(r =>
        {
            var httpRequest = (HttpWebRequest)r.AsyncState;
            var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(r);

            using (var reader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var response = reader.ReadToEnd();
                ResponseBlock.Text = response; //Invalid cross-thread reference
            }
        }, httpReq);
    }
主页:

private void button1_Click(object sender, RoutedEventArgs e)
    {
        Member m = new Member(name, id);
    }
customClass.DownloadPage((result) =>
{
    textBlock.Text = result;
},
(exception) =>
{
    MessageBox.Show(exception.Message);
});
客户类别:

public void DownloadPage(Action<string> callback, Action<Exception> exception)
{
    WebClient webClient = new WebClient();
    webClient.DonwloadStringCompleted += (s, e) =>
    {
        if (e.Error == null)
        {
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                callback(e.Result);
            });
        }
        else
        {
            Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                exception(e.Error);
            });
        }
    };
    webClient.DonwloadStringAsync();
}
public void DownloadPage(操作回调,操作异常)
{
WebClient WebClient=新的WebClient();
webClient.DonwloadStringCompleted+=(s,e)=>
{
如果(e.Error==null)
{
Deployment.Current.Dispatcher.BeginInvoke(()=>
{
回调(即结果);
});
}
其他的
{
Deployment.Current.Dispatcher.BeginInvoke(()=>
{
例外情况(如错误);
});
}
};
webClient.DonwloadStringAsync();
}

请给我们看一下代码。这个问题不是很清楚。给我们看一些代码。你犯了什么错误?这是一个例外吗?我已经用相关代码更新了问题。我没有从MainPage调用更新UI的函数,而是从自定义类调用。如何访问属于另一个类的
ResponseBlock
对象?您应该返回到
MainPage
并从这里呼叫。我的代码显示了如何做到这一点