Я довольно новичок в 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){}
вызывая замерзание. Есть ли какой-либо атрибут для блокировок или volatile (кроме того, что у меня уже есть), или я не в той части жизненного цикла страницы Silverlight или что-то в этом роде?
Я действительно смущен, почему это не работает.
Кроме того, это Silverlight 3.0
При программировании в управляемых событиях UI (т. Е Silverlight), вы всегда должны использовать замещающие асинхронные методы, когда у вас есть тяжелые рабочие нагрузки. Почему вы должны делать это синхронно? –