我尝试在wpf中显示folderbrowserdialog
,但出现此异常
当前线程必须设置为单线程
OLE之前的线程单元(STA)模式
可以打电话。确保您的
主要功能具有STAThreadAttribute
标记在上面。仅此例外
如果调试器连接到,则引发
过程
我试图在此函数之前添加[STAThread],但没有任何变化,如何解决此异常?
函数是:
private void Save_any_File()
{
System.Windows.Forms.FolderBrowserDialog get_location = new System.Windows.Forms.FolderBrowserDialog();
get_location.ShowDialog();
}
最佳答案
您的Main()函数已经具有[STAThread]属性,它被埋在WPF的自动生成的代码中。它对Main()方法没有任何影响。它确保WPF应用程序的主线程(又名UI线程)创建一个“单线程单元”。在您的应用程序中的任何代码开始运行之前,这由CLR完成。
STA是UI线程的硬性要求,许多COM组件都需要STA。 STA为不是线程安全的软件提供了安全的家。因此是“单线程”。 OpenFileDialog是这样的一个组件,其他是剪贴板和拖放支持。
以及许多尝试在您的应用程序中找到家的COM组件。对于OpenFileDialog,这些是用于扩展文件夹视图外观的Shell扩展。
长话短说,毫无疑问,问题是您试图在工作线程上显示对话框。没办法使用Dispatcher.BeginInvoke()封送对UI线程的调用。