Как сохранить байтовый массив в файл из Silverlight - PullRequest
4 голосов
/ 01 февраля 2010

У меня есть приложение SL 3, подключенное к службе WCF. Этот сервис извлекает массив байтов. Я хотел бы сохранить этот массив в виде файла PDF, используя FileStream. Проблема в том, что при получении байтового массива я получаю исключение при попытке показать SaveFileDialog, потому что это действие инициируется методом обратного вызова, а не действием пользователя. Я хотел бы знать, есть ли обходной путь для этого. У меня уже есть массив байтов, теперь мне нужно сохранить его в месте, указанном пользователем. Не важно как... Любая подсказка?

Заранее спасибо.

1 Ответ

6 голосов
/ 01 февраля 2010

Связываете ли вы событие завершения метода вашего асинхронного вызова метода? Посмотреть это

http://www.silverlightshow.net/items/Using-the-SaveFileDialog-in-Silverlight-3.aspx

Внутри вашего метода обратного вызова вы можете реализовать логику записи в файл - сначала открыв диалоговое окно, а затем получив указатель на поток файла, как показано ниже.

       try 
       {
           byte[] fileBytes = //your bytes here 
           SaveFileDialog dialog=new SaveFileDialog();

           //Show the dialog              
           bool? dialogResult = this.dialog.ShowDialog();  

           if (dialogResult!=true) return;


            //Get the file stream

            using ( Stream fs = ( Stream )this.dialog.OpenFile() )  
            {  
                fs.Write( fileBytes, 0, fileBytes.Length );  
                fs.Close();  

                //File successfully saved
            }  
        }  
        catch ( Exception ex )  
        {  
            //inspect ex.Message  
        }  
...