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
并从这里呼叫。我的代码显示了如何做到这一点