分享

在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。

 悟道习术 2021-05-24

.net winform程序调试时报如下错误:


System.Threading.ThreadStateException

  HResult=0x80131520

  Message=在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试程序附加到该进程才会引发此异常。

  Source=<无法计算异常源>

  StackTrace:

<无法计算异常堆栈跟踪>


以下为截图:


按提示将当前线程设置为STA模式,如下所示,

 Thread.CurrentThread.SetApartmentState(ApartmentState.STA);


但还报如下错误:


既然主线程不行,那么新建一个线程呢?于是如下进行了一番操作。

        protected void BtnUpdateExcel_Click(object sender, EventArgs e)

        {

            Thread thread = new Thread(new ThreadStart(ImportData));

            thread.SetApartmentState(ApartmentState.STA);

            thread.Start();

            

         while (thread.ThreadState==ThreadState.Stopped)

            {

                GvUpdateData.DataSource = dtUpdate;

                GvUpdateData.DataBind();

            }


        }


        Datatable dtUpdate;

        public void ImportData()

        {

            dtUpdate = GetDataFromExcelByConn(true);  

        }

如上后正常……但为什么要如此,还有些疑惑,记之以备忘。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多