"Dialogs must be user-initiated." with SaveFileDialog in Silverlight 3

Viewed 32459

I am working on a Silverlight 3 app with C#. I would like to allow the user to download an image from the Silverlight app. I am using SaveFileDialog to perform the file download task. The flow goes this way:

  1. User clicks on Download button in the SL app.
  2. Web service call invoked to get the image from server
  3. OnCompleted async event handler of the web method call get invoked and receives the binary image from the server
  4. Within the OnCompleted event handler, SaveFileDialog prompted to user for saving the image to computer.
  5. Stream the image to the file on user's harddrive.

I am using the following code in a function which is called from the OnCompleted event handler to accomplish SaveFileDialog prompt and then streaming to file.

            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();
                }
            }

The SaveFileDialog would throw the error "Dialogs must be user-initiated." when invoking ShowDialog method in the above code. What could i be missing here? How to overcome this?

5 Answers

I just started on Silverlight 4 and had the same issue. It seems that if you manually create event handlers, the security exception is thrown, even if the event handler is handling a button click event with the correct parameters, but if you use the "create a new event handler" option on the button in Xaml under the click event, the new event handler, with the same code and parameters now works....this is one of the many "corky" things that I have come across since starting the transition from WPF to Silverlight.

Related