1

您好,我在以下行出现错误:

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

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

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

错误是:

“ThreadStateException:当前线程必须设置为单线程单元 (STA) 模式,然后才能进行 OLE 调用。”

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

4

3 回答 3

1

ASP.NET 并没有真正与 STAThread 相处。

您需要一个额外的任务调度程序以在 STA 模式下运行线程以从操作系统访问您想要的内容

看看这篇文章,它让我有了这样的想法。

另外,请记住,对您的页面的多个请求可能会搞砸事情,因为您正在与操作系统的剪贴板(在另一个 COM 上下文中运行)进行交互,并发可能存在风险。

你想完成什么,也许有更好的方法。

于 2012-11-15T21:19:07.110 回答
0

不要忘记阅读最后的笔记。

http://www.telerik.com/community/forums/community-forums/interesting-resources/using-clipboard-class-in-asp-net.aspx

于 2012-11-15T21:22:12.510 回答
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

此外,您可以在 Single Apartment Mode 中显式启动一个新线程

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
于 2012-11-15T21:24:41.980 回答