异常“ThreadStateException: Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it.”

前言:做项目的时候在线程调用的方法内部出现了如下异常:

 

百度翻译如下:

 解决办法如下:设置线程单元状态为STA

            Thread thread = new Thread(() => HandleFile(logic_FrmDocumentScan, ucd, strImageFolder)) { IsBackground = true };
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();

SetApartmentState 底层如下:

        //
        // 摘要:
        //     在线程启动前设置其单元状态。
        //
        // 参数:
        //   state:
        //     新的单元状态。
        //
        // 异常:
        //   T:System.PlatformNotSupportedException:
        //     仅限 .NET Core:macOS 和 Linux 平台上不支持此成员。
        //
        //   T:System.ArgumentException:
        //     state 不是有效的单元状态。
        //
        //   T:System.Threading.ThreadStateException:
        //     线程已启动。
        //
        //   T:System.InvalidOperationException:
        //     已初始化单元状态。
        [SecuritySafeCritical]
        public void SetApartmentState(ApartmentState state);

AparmentState 枚举如下:

    //
    // 摘要:
    //     指定 System.Threading.Thread 的单元状态。
    [ComVisible(true)]
    public enum ApartmentState
    {
        //
        // 摘要:
        //     System.Threading.Thread 将创建并进入一个单线程单元。
        STA = 0,
        //
        // 摘要:
        //     System.Threading.Thread 将创建并进入一个多线程单元。
        MTA = 1,
        //
        // 摘要:
        //     尚未设置 System.Threading.Thread.ApartmentState 属性。
        Unknown = 2
    }

编码时遇到了这个异常,记录下,以后遇到了有个印象

 

posted @ 2021-10-21 14:55  #疆先绅#  阅读(328)  评论(0编辑  收藏  举报