【发布时间】:2023-03-18 17:05:01
【问题描述】:
谁能解释一下我看到的这个错误是什么?
在进行 OLE 调用之前,必须将当前线程设置为单线程单元 (STA) 模式。
具体来说,我正在尝试在表单上的 C++/CLI 中打开 SaveFileDialog/OpenFileDialog。
SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;
saveFileDialog1->ShowDialog();
if (saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
{
s = saveFileDialog1->OpenFile();
}
s->Close();
}
抛出的错误是
System.Windows.Forms.dll 中出现“System.Threading.ThreadStateException”类型的未处理异常
附加信息:在进行 OLE 调用之前,必须将当前线程设置为单线程单元 (STA) 模式。确保您的 Main 函数上标记了 STAThreadAttribute。仅当将调试器附加到进程时才会引发此异常。
我不太熟悉这个错误的含义。我对线程有一点了解,但我不确定线程在这里会成为一个问题。我看到有些人引用了 STAThread 之类的东西,但没有明确说明它的作用,而且微软的文档也没有提到在调用 SaveFileDialog/OpenFileDialog 时抛出这个异常,或者如何处理它。
谢谢!
【问题讨论】:
标签: multithreading c++-cli openfiledialog savefiledialog sta