2012-11-23 5 views
6

「ダイアログは、ユーザーが開始しなければなりません」というエラーを与えていますメインボタンのクリックイベント:SaveFileDialogは、私はエラーを取得しています

private void btnSaveAttach_Click(object sender, RoutedEventArgs e) 
     { 
      if (EditableGV.SelectedItems.Count == 1) 
      { 
       PositionAttachment posAtt = new PositionAttachment(); 
       posAtt = (PositionAttachment)EditableGV.SelectedItems[0]; 
       SaveFile(posAtt.File, posAtt.FileName); 

      } 
      else 
      { 
       RadWindow.Alert("Please select a attachment from the existing attachments list.", null); 
       return; 
      } 

     } 

private void SaveFile(byte[] fileByte, string fileName) 
    { 
     try 
     { 
      byte[] fileBytes = fileByte;//your bytes here 

      //Show the dialog   

      SaveFileDialog dialog2 = new SaveFileDialog(); 
      saveDialog = dialog2.ShowDialog();//This line is giving the error 

      if (saveDialog == true) 
      { 
       //Get the file stream 
       dialog2.DefaultFileName = fileName; 
       string fileExt = fileName.Substring(fileName.LastIndexOf('.'), fileName.Length); 
       dialog2.DefaultExt = "All Files|*.*|" + fileExt + "|*." + fileExt + ""; 
       using (Stream fs = (Stream)dialog2.OpenFile()) 
       { 
        fs.Write(fileBytes, 0, fileBytes.Length); 
        fs.Close(); 

        //File successfully saved 
       } 
      } 
     } 
     catch 
     { 
      MessageBox.Show("Error in downloading file"); 
     } 
    } 

のXmaIコード:

<StackPanel x:Name="Layout"> 
    <StackPanel x:Name="Messagepanel" Margin="2" Visibility="Collapsed"> 
     <TextBlock x:Name="txtMessage" Text="1" Height="35"></TextBlock> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" Margin="4"> 
     <sdk:Label Height="28" Content="Select File:" Name="lblSelectFile" Grid.Column="0" Grid.Row="0" Width="70" /> 
     <TextBox Name="txtFileName" IsReadOnly="True" HorizontalAlignment="Left" VerticalAlignment="Center" Width="303" Grid.Column="1" Margin="12,1,0,0"></TextBox> 
     <Button Content="Browse" Name="btnBrows" Width="55" Height="22" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="16,1,0,0" Click="btnBrows_Click" Grid.Column="1" /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" Margin="4"> 
     <sdk:Label Height="28" Content="Description:" Name="lblFileDescription" Grid.Column="0" Grid.Row="1" Width="70" /> 
     <TextBox Height="60" Name="txtComments" Grid.Column="1" 
     VerticalScrollBarVisibility="Auto" Width="301" Margin="13,0,85,2" Grid.Row="1" /> 
    </StackPanel> 
    <StackPanel Orientation="Horizontal" Margin="4"> 

     <Button x:Name="OKButton" Content="Add" Click="OKButton_Click" Width="43" Margin="363,6,10,15" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Left" /> 

     <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="53" HorizontalAlignment="Right" Margin="0,6,200,15" Grid.Row="2" Grid.Column="1" /> 
    </StackPanel> 
    <StackPanel Orientation="Vertical" Margin="4" Height="224"> 
     <sdk:Label Content="Existing Attachment(s):" Height="20" Margin="15,7,324,10" Name="lblExistingAttachemnt" /> 
     <telerikGrid:RadGridView x:FieldModifier="public" 
         x:Name="EditableGV" 
         AutoGenerateColumns="False" 
         ItemsSource="{Binding PositionAttachemntCollection, Mode=TwoWay}" Margin="0,0,0,7" Height="150"> 
      <telerik:RadGridView.Columns> 
       <telerik:GridViewDataColumn DataMemberBinding="{Binding FileName,Mode=TwoWay}"></telerik:GridViewDataColumn> 
       <telerik:GridViewDataColumn DataMemberBinding="{Binding FileDescription,Mode=TwoWay}"></telerik:GridViewDataColumn> 
       <!--<telerik:GridViewColumn Header="" > 
        <telerik:GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <telerik:RadButton Name="btnDownlaod" Content="Save" Click="HyperlinkButton_Click"></telerik:RadButton> 
          <<HyperlinkButton Click="HyperlinkButton_Click" Content="{Binding FileName,Mode=OneWay}" TargetName="_blank" NavigateUri="http://www.google.com" /> 
         </DataTemplate> 
        </telerik:GridViewColumn.CellTemplate> 
       </telerik:GridViewColumn>--> 
      </telerik:RadGridView.Columns> 
     </telerikGrid:RadGridView> 

     <StackPanel Orientation="Horizontal" Margin="0"> 
      <!--<Button Content="Save Attachment" Name="btnSaveAttach" Width="112" Margin="263,6,10,15" Click="btnSaveAttach_Click" />--> 
      <Button Content="Close" Name="btnClose" Width="75" Margin="3,6,10,15" Click="btnClose_Click" /> 
     </StackPanel> 

    </StackPanel> 
</StackPanel> 

この関数は、ボタンのクリックに呼びかけています。私は同じページでもopenFiledialogを持っているが、間違いなく正常にダイアログを開いているのだろうと思っている。そのsavefileダイアログでエラーが発生する理由

at System.Windows.Controls.SaveFileDialog.ShowDialogInternal(Window owner) 
    at System.Windows.Controls.SaveFileDialog.ShowDialog() 
    at IPVWorkbench.Views.AddPositionAttachments.btnSaveAttach_Click(Object sender, RoutedEventArgs e) 
    at System.Windows.Controls.Primitives.ButtonBase.OnClick() 
    at System.Windows.Controls.Button.OnClick() 
    at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 
    at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) 
    at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName, UInt32 flags) 
+1

ボタンクリックとこの呼び出しの間にはどのようなコードがありますか?ユーザーの操作とダイアログが表示される必要がある間に最小限の時間があります。その時間を超えていると、このエラーが発生します。 – ChrisF

+0

私はFileデータを取得し、それを公開変数 "fileByte"に格納しています –

+0

ここからデータを取得していますか?非同期呼び出しを使用していますか? – ChrisF

答えて

0

私はこれを回避する方法を発見しました。私は、ボタンをクリックして確認ボックスを表示し、確認ボックスの "OK"イベントでファイルの保存ダイアログボックスを開きます。このようにして例外がスローされません。

1

あなたのbtnSaveAttach_ClickでSaveFileDialog(それはユーザーが開始される方法)を表示する必要があります。

以下は、エラーのスタックトラックです。またremove all your breakpointsもそのエラーを生成する可能性があります。

は、あなたがそれに基づいて、あなたのコードの残りの部分を構築し、これを試してみて、それが動作するかどうかを確認:

private void btnSaveAttach_Click(object sender, RoutedEventArgs e) 
{ 
    SaveFileDialog dialog2 = new SaveFileDialog(); 
    saveDialog = dialog2.ShowDialog(); 
} 
+0

動作していません...同じエラーが発生しています、私もすべてのブレークポイントを削除しました。 –

+0

SLのどのバージョンを使用していますか? –

+0

私はSilverlight 5を使用しています –

2

答えがここに与えられます。http://social.msdn.microsoft.com/Forums/en-US/lightswitch/thread/8c6529ab-8967-45e8-9e19-920589b060c1

は、これはちょっと「セキュリティ機能」です。

は基本的には、ユーザーのアクションによって引き起こされるイベントに応答して、直接SaveFileDialogまたはOpenFileDialogを開く必要があります(クリックなど)、メインスレッドでのみ発生します。

関連する問題