2009-10-01 38 views
1

我在Silverlight 3中通過SaveFileDialog發生了奇怪的異常。我真的不知道問題出在哪裏。Silverlight 3中的SaveFileDialog存在問題

我創建了的實例SaveFileDialog in 加載用戶控件事件。 下載按鈕被點擊並且dialogResulttrue異步文件下載開始。文件下載完成後,方法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(); 
      } 

     } 

有任何人知道什麼是錯的?

問候 安東Kalcik

+0

嘗試在usrctrl加載事件一旦綁定DownloadFileCompleted事件,但我懷疑這會解決您的問題,對不起。 – Neil 2009-10-03 05:32:49

+0

你好,沒有你的建議不能解決它:-(。我不知道什麼是錯的。謝謝 – 2009-10-03 08:24:42

回答

0

有多個事件處理程序的問題。每次點擊都會附加事件處理程序,從不分離。在UserControl關閉後,事件處理程序也保持連接狀態。因此,開發人員正確地分離事件處理程序。

問候 又名

相關問題