我正在使用C#編寫Silverlight 3應用程序。我想允許用戶從Silverlight應用程序下載圖像。我正在使用SaveFileDialog來執行文件下載任務。流程如下:「對話框必須由用戶啓動。」在Silverlight 3中使用SaveFileDialog
- 用戶單擊SL應用程序中的下載按鈕。
- Web服務調用調用以從服務器獲取圖像
- OnCompleted web方法調用的異步事件處理函數被調用,並從服務器
- 內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方法時。我在這裏可能會錯過什麼?如何克服這一點?
我得到了同樣的錯誤信息,試圖直接從Button_Click事件處理程序中使用SaveFileDialog,因爲我在調用新的SaveFileDialog()之前在方法中進行了一些驗證。下面的JumpingJezza的鏈接顯示了一個很好的例子,但看起來關鍵是在您的按鈕事件處理程序中將新的SaveFileDialog()作爲* first *行。之後,你可以看起來像做任何你喜歡的事情。 – Jedidja
而「第一」行真的意味着_first_。我正在調試某人elses代碼和一個按鈕單擊事件處理程序中的註釋代碼塊導致提到的異常。 – faester
我認爲這在saveialog打開之前是個相當麻煩的時間。如果在dialog.ShowDialog()發生錯誤之前放置斷點。請參閱http://dotnetslang.wordpress.com/2011/03/12/using-the-savefiledialog-dialogs-must-be-user-initiated-exception/ – maxence51