私は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がフリーズしたので、Firefoxに敬意を表しますが、復元後にここに入力した内容は失われませんでした)。
while(XmlStateStream==null){}
なぜフリーズが発生しているのかわかりません。ロックまたは揮発性(私がすでに持っているもの以外)の属性がありますか、それともSilverlightページのライフサイクルの間違った部分にいますか?
なぜこれが機能しないのか、私は本当に混乱しています。
また、これはSilverlight3.0です