您好我在以下行收到错误:
If Not System.Windows.Clipboard.GetDataObject Is Nothing Then
我相信它会在C#中看起来像这样。
if (System.Windows.Clipboard.GetDataObject!=null) {
错误是:
“ThreadStateException:在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。”
谁能告诉我如何解决这个问题?网上提到的一些建议提到在'main'方法上添加<STAThread()> _
,但是,这是一个ASP.NET控制器方法,我尝试在其上添加它,但它没有帮助。有人有什么建议吗?
答案 0 :(得分:1)
ASP.NET与STAThread并没有真正相处。
您需要一个额外的任务计划程序才能在STA模式下运行线程以从操作系统访问您想要的内容
看看this article它让我得到了类似的东西。
另外,请记住,对您的页面的多个请求可能会搞乱事情,因为您正在与操作系统的剪贴板(在另一个COM上下文中运行)进行交互,因此子并发可能存在风险。
你想要做什么,也许还有更好的方法。
答案 1 :(得分:0)
不要忘记阅读最后的笔记。
答案 2 :(得分:0)
这似乎是由/ bin目录中的过时dll引起的。你试过清理吗?
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/2411f889-8e30-4a6d-9e28-8a46e66c0fdb/
此外,您可以在单一公寓模式中明确启动新线程
imports System.Threading
dim newThread As New Thread(new ThreadStart(AddressOf ThreadMethod))
newThread.SetApartmentState(ApartmentState.STA);
newThread.Start();
'and elsewhere
Public Sub ThreadMethod()
If Not System.Windows.Clipboard.GetDataObject Is Nothing Then
'stuff
End if
End Sub