Tuesday, August 10, 2010

Silverlight Exception: SaveFileDialog Dialogs must user-initiated

נדרשתי ליצור כפתור ב-Silverlight שלחיצה עליו תבצע 2 פעולות:
1. "קבלת" נתונים מ-Web Service של MOSS
2. שמירה לתוך קובץ באמצעות SaveFileDialog
הוצג Exception עם פרטים SaveFileDialog Dialogs must user-initiated בתוך המתודה MOSS_WS_GetDataCompleted
לאחר הרצת הקוד הבא:

private SaveFileDialog dialog = new SaveFileDialog();
private string StringData = "";
try
{
  dialog.DefaultExt = ".txt";
  dialog.Filter = "Text Files|*.txt|All Files|*.*";
  dialog.FilterIndex = 1;
}
catch (Exception ex)
{
  tblError.Text = "Error SaveFileDialog: " + ex.Message;
}
void MOSS_WS_GetDataCompleted(object sender,
WebServiceReference.GetDataCompletedEventArgs e)
{
  string data = StringData;
  if (this.dialog.ShowDialog() == true)
  {
     using (System.IO.Stream stream = dialog.OpenFile())
     {
        using (System.IO.StreamWriter writer =
new System.IO.StreamWriter(stream))
        {
           writer.Write(data);
           writer.Close();
        }
        stream.Close();
     }
  }
}
הפיתרון
"לפצל" את הפעולה לשני כפתורים.
1. לחיצה על כפתור אחד תבצע את "קבלת" הנתונים בלבד לתוך המשתנה StringData.
2. הקוד אשר קיים במתודה MOSS_WS_GetDataCompleted יהיה בכפתור השני ויבצע את השמירה לתוך קובץ הטקסט (בדוגמא הספציפית הזו) .

Read more: Dudi Nissan's Blog