1

Silverlight 3 の SaveFileDialog による奇妙な例外があります。どこに問題があるのか​​、よくわかりません。

ユーザー コントロールのLoadedイベントでSaveFileDialogのインスタンスを作成します。[ダウンロード] ボタンがクリックされ、dialogResulttrueになった後、非同期ファイルのダウンロードが開始されます。ファイルのダウンロードが完了すると、メソッド OpenFile() が呼び出されます。これは1回はうまくいきますが、2回目は例外が発生します:

例外メッセージ:

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

        }

何が悪いのか誰にもわかりませんか?

よろしく アントン・カルシック

4

1 に答える 1

0

複数のイベント ハンドラに問題がありました。クリックするたびにイベント ハンドラーがアタッチされ、デタッチされることはありません。UserControl が閉じられた後も、イベント ハンドラーはアタッチされたままになります。そのため、適切な方法でイベント ハンドラーをデタッチするのは開発者です。

よろしくアカ

于 2009-10-20T14:53:11.573 に答える