views:

638

answers:

1

Hello, i have weird exception by SaveFileDialog in Silverlight 3. I don't really have a idea where the problem is.

I create instance of SaveFileDialog in Loaded event of user control. After Download button is clicked and dialogResult is true asynchronous file download is started. After file download is completed, method OpenFile() is called. This works fine once, but second time I get exception:

Exception message:

"No file was selected"

Details:

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

Here code snippet:

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

        }

Have anybody idea what is wrong?

Regards Anton Kalcik

A: 

There was problem with multiple event handlers. On each click is event handler attached and never detached. Event handler stays attached also after UserControl is closed. So it is on developer to detach event handler on properly way.

Regards AKa

AKa

related questions