2009-10-01 9 views
1

J'ai exception étrange par SaveFileDialog dans Silverlight 3. Je n'ai pas vraiment une idée où le problème est.Problème avec SaveFileDialog dans Silverlight 3

Je créer une instance de SaveFileDialog en événement Loaded de contrôle de l'utilisateur. Après Télécharger le bouton est cliqué et dialogResult est vrai le téléchargement de fichier asynchrone est démarré. Une fois le téléchargement du fichier terminé, la méthode OpenFile() est appelée. Cela fonctionne bien une fois, mais la deuxième fois que je reçois exception:

Message d'exception:

"No file was selected" 

Détails:

{System.InvalidOperationException: No file was selected. 
    at System.Windows.Controls.SaveFileDialog.OpenFile() 
    at Spaces.Client.Views.Dialogs.FileDialog.BL_DownloadFileCompleted(Object sender, EventArguments`1 e) 
    at Spaces.Client.BL.Interface.DownloadFileCompletedEventHandler.Invoke(Object sender, EventArguments`1 e) 
    at Spaces.Client.BL.WebService.SpacesService._spacesService_DownloadFileCompleted(Object sender, DownloadFileCompletedEventArgs e) 
    at System.EventHandler`1.Invoke(Object sender, TEventArgs e) 
    at Spaces.Client.BL.SpacesServiceReference.ServiceClient.OnDownloadFileCompleted(Object state)} 

Stack:

at System.Windows.Controls.SaveFileDialog.OpenFile() 
    at Spaces.Client.Views.Dialogs.FileDialog.BL_DownloadFileCompleted(Object sender, EventArguments`1 e) 
    at Spaces.Client.BL.Interface.DownloadFileCompletedEventHandler.Invoke(Object sender, EventArguments`1 e) 
    at Spaces.Client.BL.WebService.SpacesService._spacesService_DownloadFileCompleted(Object sender, DownloadFileCompletedEventArgs e) 
    at System.EventHandler`1.Invoke(Object sender, TEventArgs e) 
    at Spaces.Client.BL.SpacesServiceReference.ServiceClient.OnDownloadFileCompleted(Object state) 

Voici l'extrait de code:

private void _userControlFileDialog_Loaded(object sender, RoutedEventArgs e) 
     { 
      _comboBoxVersions.ItemsSource = _file.Versions; 
      if (_comboBoxVersions.Items.Count > 0) 
       _comboBoxVersions.SelectedIndex = 0; 

      String extension = "*." + _file.Extension; 

      _sfd = new SaveFileDialog(); 
      _sfd.DefaultExt = _file.Extension; 
      _sfd.Filter = extension + "|" + extension; 
     } 

     private void _hyperlinkButtonDownload_Click(object sender, RoutedEventArgs e) 
     { 
      string path = ((FileVersion)_comboBoxVersions.SelectedItem).Url; 

      bool? dialogResult = _sfd.ShowDialog(); 

      if (dialogResult == true) 
      { 
       AppContext.BL.DownloadFileCompleted += new Spaces.Client.BL.Interface.DownloadFileCompletedEventHandler(BL_DownloadFileCompleted); 
       AppContext.BL.DownloadFileAsync(AppContext.AuthenticatedUser, path); 
      } 
     } 

     void BL_DownloadFileCompleted(object sender, Spaces.Client.BL.Interface.EventArguments<byte[]> e) 
     { 
      byte [] data = e._result; 

      using (Stream fileStream = (Stream)_sfd.OpenFile()) 
      { 
       fileStream.Write(data, 0, data.Length); 
       fileStream.Flush(); 
       fileStream.Close(); 
      } 

     } 

Avez quiconque idée de ce qui ne va pas?

Cordialement Anton Kalcik

+0

Essayez lier l'événement DownloadFileCompleted une fois dans l'événement chargé de usrctrl, mais je doute cela va résoudre votre problème, désolé. – Neil

+0

Bonjour, pas votre suggestion ne le répare pas :-(. Je n'ai aucune idée de ce qui ne va pas. –

Répondre

0

Il y avait problème avec plusieurs gestionnaires d'événements. A chaque clic, le gestionnaire d'événements est attaché et jamais détaché. Le gestionnaire d'événements reste également attaché après la fermeture de UserControl. C'est donc au développeur de détacher correctement le gestionnaire d'événements.

Cordialement AKa