Сохранение файлов в Silverlight и асинхронных обратных вызовов - PullRequest
2 голосов
/ 26 октября 2010

В Silverlight вы должны сохранить файл с помощью диалогового окна сохранения файла.

Этот диалог можно открыть только из пользовательского события, то есть нажатия кнопки

Я возвращаю данныефайл из вызова веб-службы асинхронно

Как сохранить это в файл?

Если я спрашиваю их перед вызовом службы, я не могу использовать поток после возвращения данных.

Если я спрашиваю их после того, как не могу открыть диалоговое окно сохранения файла.

Это немного курицы и ситуация с яйцом.

Спасибо.

обновление

Я хочу иметь возможность сохранить компьютер пользователя там, где он не указывает изолированное хранилище Silverlight.

Ответы [ 2 ]

1 голос
/ 26 октября 2010

Откройте SaveFileDialog из пользовательского события, затем сохраните ссылку на этот диалог. Выполните вызов веб-службы, затем в обработчике этого вызова вызовите метод OpenFile() для SaveFileDialog. Используйте поток, возвращенный этим методом, для записи в ваш файл.

private SaveFileDialog _mySaveDialog;

private void Button_Click(object sender, EventArgs e)
{
   _mySaveDialog = new SaveFileDialog();
   // Configure the dialog and show it here...
}

// call this method from the handler for your web service call
private void Save(string toSave) 
{
   Stream fileStream = _mySaveDialog.OpenFile();
   // Write to the file here...
}

Если вам нужен еще более подробный пример, использующий эту же технику, см. здесь .

0 голосов
/ 26 октября 2010

Если я правильно понял ваш вопрос, здесь предлагается решение.

Конечно, будет кнопка, которая откроет кнопку сохранения. но эта кнопка будет включена, когда вызов службы завершится. Вы можете сохранить эти данные временно в изолированном хранилище. Включите кнопку сейчас. при нажатии, чтобы открыть окно сохранения Diag,

вот код для сохранения данных во временное изолированное хранилище.

public static void SaveLog(string data)
        {
            using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream isfs = new IsolatedStorageFileStream(fileName, FileMode.Append, FileAccess.Write, isf))
                {
                    using (StreamWriter sw = new StreamWriter(isfs))
                    {
                        try
                        {
                            sw.Write(data);

                        }
                        finally
                        {
                            sw.Close();
                        }
                    }
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...