我想在一个子线程中保存文件
所以需要打开一个保存对话框,
可是在打开时抛出一个异常,请问我该怎样处理??
异常描述如下:在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。

解决方案 »

  1.   

    有必要放在线程中吗?线程中不允许操作其他控件..如果要操作,可以用Invoke来解决..举个例子,在线程中给TextBox赋值://定义一个委托
    public delegate void MyInvoke(string str);
    //更新文本框的函数
    private void UpdateTextBox(string str)
    {
        this.TextBox1.Text=str;
    }//线程函数
    private void ThreadPro()
    {
        //...
        //更新方本框
        string str="value test";
        MyInvoke mi=new MyInvoke(UpdateTextBox);
        this.BeginInvoke(mi,new object[]{str});
    }
      

  2.   

    应该放在线程里
    因为我的数据是用UDP接收到的
    接收函数单起了线程
    文本框的我清楚
    但这个没搞掂
      

  3.   

    我这样没做过..不过我想能不能这样?在Invoke中打开对话框,得到你所要的信息,比如FileName,然后赋给一个成员变量,比如说:private string fileName;然后在线程用..
      

  4.   

    对话框中没有BeginInvoke()方法
      

  5.   

    虽然能用Invoke打开对话框,但是在线程中就得不到OpenFileDialog的属性值了..
      

  6.   

    public delegate void MyMethod();  //声明一个委托,以使其它线程访问//按钮
    private void button1_Click(object sender,EventArgs e)
    {
    Thread aaa = new Thread(new ThreadStart(OpenDialogOnOtherThread));
    aaa.Start();
    }//其它线程打开对话框
    void OpenDialogOnOtherThread()
    {
    MyMethod OpenDialog = new MyMethod(this.OpenDialog);
    this.Invoke(OpenDialog);  //在当前线程,调用OpenDialog
    }//打开对话框
    void OpenDialog()
    {
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.ShowDialog();
    }
      

  7.   

    OK了
    谢谢你了,热心的朋友
    你有QQ什么的,交个朋友啊
      

  8.   

    可以打开保存文件对话框的。
                       public Form1()
                      {  
    new Thread(new ThreadStart(Test)).Start();
    }
    [STAThread]
    public static void Main()
    {
    Application.Run(new Form1());
                        }
    void Test()
    {
    OpenFileDialog dlg = new OpenFileDialog();
    dlg.ShowDialog();
    }
      

  9.   

    呵呵..有兴趣可以加我MSN:[email protected]不过上得很少,CSDN倒是经常来..我也初学,正努力学习..