在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记。 多线程操作剪切板的时候。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记。 多线程操作剪切板的时候。相关的知识,希望对你有一定的参考价值。

        最近做一个蛋疼的东西就是C#调用windows API 来操作一个 软件,自动处理一些东西。要用到剪切板复制 粘贴功能,即 Clipboard.SetDataObject(filedic, true)等。

本来测试的时候,通过主线程 按钮点击开始的时候没有任何问题。但是把整个过程放在一个单独一个线程的时候一到复制的时候就报错,

“在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记”。但是查看我的主线程main函数旁边赢标记过了。

不知道怎么办,想想是不是要在线程函数上也标记,但是我想太多了,不行。最后度娘搜索多线程 “在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记”

错误,度娘里知道线程有个ApartmentState  属性 ,其实我也没有整明白,就知道 有STA 等枚举类型。想想应该是这里的问题。就把单独线程设置成 _thread.SetApartmentState(ApartmentState.STA); 

还真的再没有报上述错误。算是把问题解决了。但是为什么会是这样的。等后面研究明白了更新随笔。

以上是关于在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记。 多线程操作剪切板的时候。的主要内容,如果未能解决你的问题,请参考以下文章

ThreadThreading.TimerTask中ShowDialog()方法报错:“在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式”

在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记。 多线程操作剪切板的时候。

选择目录,选择文件夹的COM组件问题。在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器

在 ASP.NET 中将线程设置为 STA

在主线程和工作线程中加载动态库(内部调用COM dll)有什么区别?

如何在使用 OLE 自动化服务器时设置当前目录