2009-10-01 2 views
1

У меня есть странное исключение SaveFileDialog в Silverlight 3. У меня действительно нет идеи, где проблема.Проблема с SaveFileDialog в Silverlight 3

Я создаю экземпляр SaveFileDialog в Loaded случае пользовательского элемента управления. После Загрузить нажата кнопка и dialogResult is true Запускается загрузка асинхронного файла. После завершения загрузки файла вызывается метод OpenFile(). Это хорошо работает один раз, но второй раз я получаю исключение:

Exception сообщение:

"No file was selected" 

Подробности:

{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) 

Вот фрагмент кода:

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(); 
      } 

     } 

Кто-нибудь знает, что это не так?

С уважением Антон Kalcik

+0

Попробуйте однажды связывание события DownloadFileCompleted в usrctrl загружены событиях, но я сомневаюсь, что это будет исправить вашу проблему, извините. – Neil

+0

Привет, ваше предложение не исправляет :-(. Я понятия не имею, что не так. –

ответ

0

Был проблема несколько обработчиков событий. На каждом клике используется обработчик событий и никогда не отсоединяется. Обработчик событий остается прикрепленным также после закрытия UserControl. Таким образом, разработчик должен надлежащим образом отсоединить обработчик событий.

С уважением AKA

Смежные вопросы