【问题标题】:.NET getting a ThreadStateException.NET 获得 ThreadStateException
【发布时间】:2012-11-20 00:19:15
【问题描述】:

您好,我收到以下行的错误:

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

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

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

错误是:

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

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

【问题讨论】:

    标签: asp.net .net vb.net


    【解决方案1】:

    ASP.NET 并不能真正与 STAThread 相处。

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

    看看this article,它让我有了这样的想法。

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

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

    【讨论】:

    • 尝试将传入的 Word 文档转换为图像,我几乎做了“Microsoft.Office.Interop.Word.Document.Selection.CopyAsPicture”,现在尝试获取图片。根据您的解释,我认为我这样做可能不是一个好主意。有什么建议吗?
    • 有些产品可以做到这一点,pdf 打印机听起来也是个好主意。但是 ASP.NET 应用程序中的办公自动化不受支持(尝试使用 infopath 做同样的事情)
    • 对于 Word 功能,请查看 Aspose 套装。 Amyuni 是一款不错的 PDF 打印机。两者都是有偿的,但值得
    【解决方案2】:
    【解决方案3】:

    这似乎是由 /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
    

    【讨论】:

    • 我试过 Dim wordThread As Thread = New Thread(New ThreadStart(CreateWordPreview(br, streamLength, key + fileName))) 但我得到一个编译错误:'Delegate 'System.Threading.ThreadStart' 需要一个 'AddressOf' 表达式或 lambda 表达式作为其构造函数的唯一参数。
    • 糟糕。从 C# 转换为 VB.Net 的一个小错误:“ThreadMethod”之前需要有一个 AddressOf(改变了我的答案)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2021-09-14
    相关资源
    最近更新 更多