Silverlight 3中的SaveFileDialog问题

时间:2009-10-01 13:53:14

标签: silverlight-3.0 savefiledialog

我在Silverlight 3中的SaveFileDialog有一个奇怪的例外。我真的不知道问题出在哪里。

我在 Loaded 用户控件事件中创建了 SaveFileDialog 的实例。单击下载按钮后, dialogResult true 启动异步文件下载。文件下载完成后,调用方法OpenFile()。这工作正常,但第二次我得到例外:

异常消息:

"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)}

堆栈:

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

        }

有人知道出了什么问题吗?

此致 安东卡尔奇克

1 个答案:

答案 0 :(得分:0)

多个事件处理程序存在问题。每次单击都会附加事件处理程序,并且永远不会分离。 UserControl关闭后,事件处理程序也会保持连接状态。因此,开发人员可以正确地分离事件处理程序。

此致 AKA