当前位置: 首页 > 编程语言 > C#

UnabletosetstateofthespecifiedCOMunit分享

时间:2023-04-10 13:07:44 C#

CannotsetthestateofthespecifiedCOMunit看来我真的不擅长多线程应用。我试图打开一个FolderBrowserDialog,但我得到一个异常告诉我:在可以进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。我在我的Main方法中设置了STAThreadAttribute,但是从我的主A线程而不是调用FolderBrowserDialog的线程。我试过Thread.CurrentThread.SetApartmentState(ApartmentState.STA);但这给出了exceptionFailedtosetthespecifiedCOMapartmentstate。我有一个在STA模式下创建新线程并打开FolderBrowserDialog的临时修复,但我想有一个更简洁的解决方案。公寓状态设置成STA失败是什么原因?您必须在启动线程之前调用SetApartmentState()。CL在任何线程开始运行任何托管代码之前由CLR初始化。另请注意,您不能在线程池线程(包括BackgroundWorker)上执行此操作。在多线程上使用Windows通常不是一个好主意。线程上的窗口与主UI线程上的窗口没有Z顺序关系。这会导致非常棘手的可用性问题。就像隐藏在主窗口后面的对话框。也没有任务栏按钮,用户永远找不到它。不要这样做,使用Control.Invoke()使对话框模式适用于其他窗口。或者更常见的是,仅将工作线程用于非UI任务。以上就是C#学习教程:无法设置指定COM单元状态分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: