私はC#でSilverlight 3アプリケーションを開発中です。ユーザーがSilverlightアプリケーションから画像をダウンロードできるようにしたいと思います。 SaveFileDialogを使用してファイルのダウンロードタスクを実行しています。フローは次のようになります。"ダイアログはユーザーが開始する必要があります。 SaveFileDialog with Silverlight 3
- ユーザーは、SLアプリケーションの[ダウンロード]ボタンをクリックします。
- Webサービス呼び出しは、サーバから画像を取得するために呼び出さ ウェブメソッド呼び出しの
- OnCompleted非同期イベントハンドラが呼び出され、サーバーOnCompletedイベントハンドラ内
- からバイナリイメージを受け、SaveFileDialogを保存するために、ユーザーにプロンプトが表示されますコンピュータへの画像。
- イメージをユーザーのハードドライブ上のファイルにストリームします。
私はOnCompletedイベントハンドラから呼び出され、SaveFileDialogプロンプトを実行してからファイルにストリーミングする関数で次のコードを使用しています。
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "JPG Files|*.jpg" + "|All Files|*.*";
bool? dialogResult = dialog.ShowDialog();
if (dialogResult == true)
{
using (Stream fs = (Stream)dialog.OpenFile())
{
fs.Write(e.Result, 0, e.Result.Length);
fs.Close();
}
}
SaveFileDialogは「ダイアログはユーザーが開始する必要があります」というエラーをスローします。上記のコードでShowDialogメソッドを呼び出すとき私はここで何が欠けていますか?これを克服する方法は?
私は、新しいSaveFileDialog()を呼び出す前にメソッドでいくつかの検証を行っていたので、Button_Clickイベントハンドラから直接SaveFileDialogを使用しようとしたのと同じエラーメッセージが表示されました。以下のJumpingJezzaのリンクは良い例ですが、ボタンイベントハンドラの* First *行として新しいSaveFileDialog()を持つことが鍵です。その後、あなたは一見あなたが好きなことをすることができます。 – Jedidja
"最初の"行は実際には_first_を意味します。私は誰かのelsesコードをデバッグしていましたが、ボタンクリックイベントハンドラ内のコメント付きコードブロックが上記の例外を引き起こしました。 – faester
私はこれがむしろ、保存された開店の前の時間の問題だと思います。 dialog.ShowDialog()の前にブレークポイントを置くと、エラーが発生します。 http://dotnetslang.wordpress.com/2011/03/12/using-the-savefiledialog-dialogs-must-be-user-initiated-exception/ – maxence51