загрузить файл из абсолютного uri в поток в SaveFileDialog

Я дошел до помещения файла в поток с URL-адреса. Однако размещение savefiledialog внутри события OpenReadCompleted выдает исключение, потому что диалог сохранения файла должен быть запускается из инициированного пользователем события. Помещение savefiledialog НЕ в OpenReadCompleted дает ошибку, потому что массив байтов пуст, но еще не обработан. Есть ли другой способ сохранить файл в потоке из uri без использования события?

public void SaveAs()
{
WebClient webClient = new WebClient(); //Provides common methods for sending data to and receiving data from a resource identified by a URI.
        webClient.OpenReadCompleted += (s, e) =>
                                           {
                                               Stream stream = e.Result; //put the data in a stream
                                               MemoryStream ms = new MemoryStream();
                                               stream.CopyTo(ms);
                                               bytes = ms.ToArray();
                                           };  //Occurs when an asynchronous resource-read operation is completed.
        webClient.OpenReadAsync(new Uri("http://testurl/test.docx"), UriKind.Absolute);  //Returns the data from a resource asynchronously, without blocking the calling thread.

        try
        {
        SaveFileDialog dialog = new SaveFileDialog();
        dialog.Filter = "All Files|*.*";

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

        if (dialogResult != true) return;

        //Get the file stream
        using (Stream fs = (Stream)dialog.OpenFile())
        {
            fs.Write(bytes, 0, bytes.Length);
            fs.Close();

            //File successfully saved
        }
        }
        catch (Exception ex)
        {
            //inspect ex.Message
            MessageBox.Show(ex.ToString());
        }

}
5
задан AnthonyWJones 22 November 2011 в 20:23
поделиться