URLからストリームにファイルを入れている限りです。 OpenReadCompletedイベント内にputtin savefiledialogを置くと、ユーザーのiniatedイベントからsavefiledialogを起動する必要があるため、例外が発生します。 OpenReadCompleted内にsavefiledialogを置かないと、bytes配列がまだ処理されていないため、エラーが発生します。 イベントを使用せずにuriからファイルを保存する別の方法はありますか?取るに絶対URLからファイルをダウンロードしてSaveFileDialogにダウンロードしてください
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());
}
}
これは完全に機能します。なぜ私はそれを考えなかったのですか?おそらく私は初心者ですから。どうもありがとう。 – tutu