我对 silverlight 很陌生,并且很惊讶地发现只能进行异步文件下载。好吧,我试图通过设置一个标志并等待它改变来解决这个问题。这是我的简单代码
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadProgressChanged +=
new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(webClient_OpenReadCompleted);
webClient.OpenReadAsync(new Uri("/trunk/internal/SilverLightInterface.ashx?xxid=XXX", UriKind.Relative));
while (XmlStateStream == null) { }
lblProgress.Content = "Done Loading";
}
void webClient_DownloadProgressChanged(object sender,
DownloadProgressChangedEventArgs e) {
lblProgress.Content = "Downloading " + e.ProgressPercentage + "%";
}
volatile Stream XmlStateStream = null;
void webClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null)
{
lblProgress.Content = "Error: " + e.Error.Message;
return;
}
XmlStateStream = e.Result;
}
这导致 Firefox 实际冻结(当我在开发时做其他事情时这非常烦人)(顺便说一句,对 firefox 表示敬意,因为我测试了它并且 firefox 冻结了,但我没有丢失我在恢复后在这里输入的内容)
我不明白为什么while(XmlStateStream==null){}
会导致冻结。是否有锁定或易失性的某些属性(除了我已经拥有的)或者我是否处于 Silverlight 页面生命周期的错误部分或其他什么?
我真的很困惑为什么这不起作用。
另外,这是silverlight 3.0