2013-02-13 81 views
0

虽然我指定了不同的位置,但文件被保存在mydocuments中。如何解决这个问题。请分享你的想法,如果有的话。这里是代码。文件没有保存在winforms中的指定位置c#

  if (externalButton.Checked == true) 
      { 
       // int i = 1; 
       saveFileDialog.Title = "Save the Proofer Report"; 
       saveFileDialog.Filter = "Document Files (*.doc)|*.doc|Document Files (*.docx)|*.docx"; 
       saveFileDialog.FilterIndex = 0; 
       saveFileDialog.InitialDirectory = "MyDocuments"; 
       saveFileDialog.FileName = "Proofer Report -- " + Path.GetFileName((string)fileName) + ".doc"; 
       //i.tostring() 
       saveFileDialog.DefaultExt = ".doc"; 


       saveFileDialog.ShowHelp = true; 
       // saveFileDialog.ShowDialog(); 
       var thread = new Thread(new ParameterizedThreadStart(param => { saveFileDialog.ShowDialog(); })); 
       thread.SetApartmentState(ApartmentState.STA); 
       thread.Start(); 
       fname = saveFileDialog.FileName; 
+3

为什么线? – BlueChippy 2013-02-13 06:39:40

+0

正在使用不同的线程,因为我得到“当前线程必须设置为单线程单元(STA)模式之前可以进行OLE调用”错误 – user1665707 2013-02-13 10:25:48

回答

3

你是显示启动线程后新的线程和代码对话框assynchronously执行显示之前对话框(大部分时间)。

要么等待线程完成或关闭对话框后移至保存到该线程。

0

为什么你是显示不同的线程saveFileDialog? 如果你表现出保存在不同势线程fname = saveFileDialog.FileName;对话框总是返回null.dont使用单独的thread.or线程调用此事件后启动

saveFileDialog1.FileOk += new CancelEventHandler(saveFileDialog1_FileOk); 
void saveFileDialog1_FileOk(object sender, CancelEventArgs e) 
     { 
      string fname = null; 
      fname = saveFileDialog1.FileName; 
     } 

编辑

public partial class Form1 : Form 
    { 

     public Form1() 
     { 
      InitializeComponent(); 
      _SaveFileDialog.FileOk += new CancelEventHandler(_SaveFileDialog_FileOk); 
     } 
     string filename = null; 
     SaveFileDialog _SaveFileDialog = new SaveFileDialog(); 
     private void savebtn_Click(object sender, EventArgs e) 
     { 
      _SaveFileDialog.Title = "Save the Proofer Report"; 
      _SaveFileDialog.Filter = "Document Files (*.doc)|*.doc|Document Files (*.docx)|*.docx"; 
      _SaveFileDialog.FilterIndex = 0; 
      _SaveFileDialog.InitialDirectory = "MyDocuments"; 
      _SaveFileDialog.FileName = "Proofer Report -- .doc"; 
      _SaveFileDialog.DefaultExt = ".doc"; 
      _SaveFileDialog.ShowHelp = true; 
      var thread = new Thread(new ParameterizedThreadStart(param => { _SaveFileDialog.ShowDialog(); })); 
      thread.SetApartmentState(ApartmentState.STA); 
      thread.Start(); 
     } 
     void _SaveFileDialog_FileOk(object sender, CancelEventArgs e) 
     { 
      filename = _SaveFileDialog.FileName; 
     } 
    } 
+0

正在使用不同的线程,因为我越来越“当前线程必须设置为单之前OLE调用线程单元(STA)模式可取得” 错误 – user1665707 2013-02-13 10:15:08

+0

化妆保存在UI线程显示对话框中,它与'thread.SetApartmentState(ApartmentState.STA)你的线程;' – KF2 2013-02-13 10:49:59

+0

我凭着了解如何保存对话框中的UI线程..我该怎么做? – user1665707 2013-02-13 12:11:28