2012-11-23 7 views
6

मैं एक त्रुटि हो रही है:SaveFileDialog त्रुटि दे रहा है "संवाद होना चाहिए उपयोगकर्ता द्वारा आरंभ"

Dialog must be user-initiated 

जब मैं अपने Silverlight applicaiton से savefile संवाद खोलने में हूँ मैं नीचे दिए गए कोड का उपयोग कर रहा

मुख्य बटन क्लिक करें घटना:

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

XMAL कोड:

<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> 

यह फ़ंक्शन एक बटन पर क्लिक बुला रहा है। मैं सोच रहा हूं कि मेरे पास एक ही पृष्ठ पर ओपनफिल्डियलॉग भी है लेकिन बिना किसी त्रुटि के संवाद सफलतापूर्वक खोल रहा है। क्यों सहेजने वाला संवाद एक त्रुटि उत्पन्न कर रहा है।

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

मैं सिर्फ फाइल डेटा ला रहा हूं और इसे एक सार्वजनिक चर में संग्रहीत कर रहा हूं "fileByte" –

+0

आप कहां से डेटा ला रहे हैं? क्या यह एक एसिंक्रोनस कॉल का उपयोग कर रहा है? – ChrisF

उत्तर

0

मैं इस के लिए एक समाधान मिल गया है। मैंने बटन क्लिक पर एक पुष्टिकरण बॉक्स दिखाया है और पुष्टि बॉक्स के "ठीक" ईवेंट पर मैंने फ़ाइल संवाद बॉक्स को खोल दिया है, इस तरह यह कोई अपवाद नहीं फेंक रहा है।

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

आप किस एसएल का उपयोग कर रहे हैं? –

+0

मैं सिल्वरलाइट 5 –

2

जवाब यहां दी गई है: http://social.msdn.microsoft.com/Forums/en-US/lightswitch/thread/8c6529ab-8967-45e8-9e19-920589b060c1

इस थोड़े 'सुरक्षा सुविधा' है:

असल में, आपको लगता है कि एक उपयोगकर्ता कार्रवाई के कारण होता है एक घटना के जवाब में सीधे एक SaveFileDialog या OpenFileDialog खोलने के लिए है (उदाहरण के लिए क्लिक करें), जो केवल मुख्य धागे पर उठाए जाते हैं।

संबंधित मुद्दे