2016-11-29 8 views
1

Довольно простой код для запуска SaveFileDialog, а затем сохранить данные. Открывает приглашение, я могу выбрать, где я сохраняю, он сохраняет файл, а затем целую вкладку/приложение зависает. Очевидно, отлично работает в Windows/IE. Какие-либо предложения?Приложение Silverlight зависает на Mac при сохранении файла

private void SavePDFFile() 
     { 
      var saveFileDialog = new SaveFileDialog 
            { 
             DefaultExt = "pdf", 
             Filter = string.Format("Document(.{0})|*.{0}", "pdf"), 
             FilterIndex = 1, 
             DefaultFileName = DateTime.Now.ToString("HHmmMMddyyyy") 
            }; 

      var saveClicked = saveFileDialog.ShowDialog(); 
      if (!saveClicked.HasValue || !saveClicked.Value) return; 
      var fileStream = saveFileDialog.OpenFile(); 

      try 
      { 
       this.IsBusy = true; 
       fileStream.Write(this.PDFData, 0, this.PDFData.Length); 
       fileStream.Close(); 
      } 
      catch (Exception ex) 
      { 
       this.DisplayErrorMessage("Error saving PDF file", ex); 
      } 
      finally 
      { 
       this.IsBusy = false; 
      } 
     } 
+0

не могли бы вы пересмотреть мой ответ и сообщить мне, если это поможет. –

ответ

1

Отвечая на мой вопрос. Это не связано с самим кодом. Это проблема безопасности. Чтобы этот код выполнялся на Mac (и, похоже, это новые версии IE), вам нужно предоставить ему больше разрешений.

В IE вам необходимо добавить сайт в список надежных сайтов.

На Mac - вам нужно установить Silverlight для запуска в режиме «Небезопасный». Это находится в разделе «Настройки/Безопасность/Silverlight» и вам нужно выбрать веб-сайт, удерживать клавишу «Option», а затем открыть раскрывающийся список, чтобы увидеть эту опцию. Потребовалось некоторое время, чтобы найти его.

0

@katit Я также столкнулся этот вопрос во время работы над приложением Silverlight OOB .. мое приложение работает нормально в Windows, но в Mac он получил заморожена, и я должен заставить бросить использовать его снова.

Я действительно читал PDF-файл (хранящийся в полевой форме - «varbinary») с сервера и сохраняя его на локальной машине пользователя.

Решение для меня - это загрузка фрагментов файлов по частям (я использовал размер буфера - 1 МБ).

Не знаете, какой размер файла вы используете, когда ваше приложение замерзает .. но я думаю, что писать «PDFData» в filestream на небольших деталях может вам помочь.

Также добавьте filestream.Flush(); (см. приведенный ниже код) в вашем коде и посмотреть, поможет ли это:

private void SavePDFFile() 
    { 
     var saveFileDialog = new SaveFileDialog 
           { 
            DefaultExt = "pdf", 
            Filter = string.Format("Document(.{0})|*.{0}", "pdf"), 
            FilterIndex = 1, 
            DefaultFileName = DateTime.Now.ToString("HHmmMMddyyyy") 
           }; 

     var saveClicked = saveFileDialog.ShowDialog(); 
     if (!saveClicked.HasValue || !saveClicked.Value) return; 
     var fileStream = saveFileDialog.OpenFile(); 

     try 
     { 
      this.IsBusy = true; 
      fileStream.Write(this.PDFData, 0, this.PDFData.Length); 
      **filestream.Flush();** 
      fileStream.Close(); 
     } 
     catch (Exception ex) 
     { 
      this.DisplayErrorMessage("Error saving PDF file", ex); 
     } 
     finally 
     { 
      this.IsBusy = false; 
     } 
    } 
+0

Нет, это не моя проблема. – katit

+0

Хорошо. Спасибо за ответ. Я думал, что это связано с большим размером файла. –

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

  • Нет связанных вопросов^_^