.NET获取ThreadStateException

时间:2012-11-15 21:12:14

标签: asp.net .net vb.net

您好我在以下行收到错误:

If Not System.Windows.Clipboard.GetDataObject Is Nothing Then

我相信它会在C#中看起来像这样。

if (System.Windows.Clipboard.GetDataObject!=null) {

错误是:

“ThreadStateException:在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。”

谁能告诉我如何解决这个问题?网上提到的一些建议提到在'main'方法上添加<STAThread()> _,但是,这是一个ASP.NET控制器方法,我尝试在其上添加它,但它没有帮助。有人有什么建议吗?

3 个答案:

答案 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/

http://www.devnewsgroups.net/windowsforms/t36723-current-thread-must-set-single-thread-apartment-sta.aspx

此外,您可以在单一公寓模式中明确启动新线程

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