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

.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)

相关推荐