无法设置指定的COM单元状态
看来我对multithreading应用程序真的不太好。 我正在尝试打开FolderBrowserDialog
,但我得到一个exception告诉我:
Current thread must be set to single thread apartment (STA) mode before OLE calls can be made.
我在我的Main方法中设置了STAThreadAttribute
,但是从我的主线程以外的线程调用FolderBrowserDialog。 我试过了
Thread.CurrentThread.SetApartmentState(ApartmentState.STA);
但是这给了exceptionFailed to set the specified COM apartment state
。
我有一个临时修复,在STA模式下创建一个新线程并打开FolderBrowserDialog
,但我想有一个更整洁的解决方案。 导致无法将公寓状态设置为STA的原因是什么?
您必须在启动线程之前调用SetApartmentState()。 在任何线程开始运行任何托管代码之前,CL由CLR初始化。 另请注意,您无法在线程池线程上执行此操作,包括BackgroundWorker。
在多个线程上使用Windows通常是一个坏主意。 线程上的窗口与主UI线程上的窗口没有Z顺序关系。 这可能会导致非常棘手的可用性问题。 就像隐藏在主窗口后面的对话框一样。 也没有任务栏按钮,用户永远不会找到它。
不要这样做,使用Control.Invoke()使对话框是其他窗口的模态。 或者更常见的是,仅将工作线程用于非UI任务。
上述就是C#学习教程:无法设置指定的COM单元状态分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1043113.html