Csharp/C#教程:无法设置指定的COM单元状态分享


无法设置指定的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

(0)
上一篇 2022年1月31日
下一篇 2022年1月31日

精彩推荐