使用FolderBrowserDialog时出现异常。

18 浏览
0 Comments

使用FolderBrowserDialog时出现异常。

当尝试使用FolderBrowserDialog时,我遇到了以下异常:

System.Threading.ThreadStateException: 在进行OLE调用之前,当前线程必须设置为单线程公寓(STA)模式。请确保您的Main函数上已经标记了STAThreadAttribute。只有在调试器附加到进程时,才会引发此异常。

我已经广泛地搜索了这个问题,并且每个人提出的解决方案似乎都是在Main方法上方添加[STAThreadAttribute],从Debug文件夹中删除所有的dll文件,或者使用Invoke方法。我尝试了所有这些方法,但仍然遇到相同的异常。

以下是代码:

public partial class Form1 : Form
{
    public event EventHandler ChooseLocationHandler = null;
    public string DestFolder
    {
        set { textBox1.Text = value; }
        get { return textBox1.Text; }
    }
    public Form1()
    {
        InitializeComponent();
    }
    private void ChooseLocationButton_Click(object sender, EventArgs e)
    {
        if (ChooseLocationHandler != null)
            ChooseLocationHandler(this, e);
    }
}

在我的Presenter中是以下代码:

public partial class Presenter
{
    Form1 myForm;
    public Presenter()
    {
        myForm = new Form1();
        myForm.ChooseLocationHandler += ChooseLocationHandler;
        myForm.Show();
    }
    public void ChooseLocationHandler(object obj, EventArgs e)
    {
        Form1 sender = (Form1)obj;
        FolderBrowserDialog fbd = new FolderBrowserDialog();
        fbd.RootFolder = System.Environment.SpecialFolder.MyComputer;
        fbd.ShowNewFolderButton = true;
        if (fbd.ShowDialog() == DialogResult.Cancel)
            return;
        sender.DestFolder = fbd.SelectedPath;
    }
}

在fbd.ShowDialog()处我遇到了异常。

0