在可以调用 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); 

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

posted @ 2016-01-29 16:52  bos_kg  阅读(4679)  评论(1编辑  收藏  举报