Je suis assez nouveau à Silverlight et j'ai été très surpris de voir que seul le téléchargement de fichiers asynchrone peut être fait. Eh bien, je suis tenté de contrer agir en réglant simplement un drapeau et d'attendre là-dessus pour changer .. Ceci est mon code simpleComment télécharger des fichiers de manière bloquante/synchrone?
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;
}
Cela est à l'origine de Firefox à geler réellement (ce qui est extrêmement ennuyeux quand Je fais d'autres choses tout en développant) (btw, bravo à firefox car je l'ai testé et firefox gelé, mais je n'ai pas perdu ce que je tapais ici après la restauration)
Je ne comprends pas pourquoi le while(XmlStateStream==null){}
est provoquant un gel. Y at-il un attribut pour les verrous ou volatile (autre que ce que j'ai déjà) ou suis-je dans la mauvaise partie du cycle de vie de la page Silverlight ou quelque chose?
Je suis vraiment confus quant à savoir pourquoi cela ne fonctionne pas.
En outre, c'est silverlight 3.0
Lors de la programmation dans un événement interface utilisateur entraîné (. C.-à-Silverlight), vous devez toujours utiliser des méthodes asynchrones lorsque repli vous avez des charges de travail lourdes. Pourquoi devez-vous le faire de manière synchrone? –