提示在可以调用OLE之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute
导入导出功能,在调用ShowDialog时的错误,解决办法如下:
WinForm窗体的入口点:
![复制代码](https://img-blog.csdnimg.cn/img_convert/42ec3a25a90d9c6365e17d6149425a66.gif)
/// <summary>
/// 应用程序的主入口点加入 [STAThread]。
/// </summary>
[STAThread]
private static void Main(String[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new LoginForm());
}
![复制代码](https://img-blog.csdnimg.cn/img_convert/4a94f547887fdb8ac0779370fdcdac21.gif)
修改如下:Thread线程调用SetApartmentState(ApartmentState.STA)设置 //重点
此种报错情况下就不能用Task创建线程了,因为Task没有SetApartmentState方法
![复制代码](https://img-blog.csdnimg.cn/img_convert/bd5cee9a74e46af0414fa75de17fc7ef.gif)
public string importPath=""; //全局变量,用于显示导入文件路劲
private void btnImport_Click(object sender, EventArgs e)
{
Thread importThread = new Thread(new ThreadStart(ImportDialog));
importThread.SetApartmentState(ApartmentState.STA); //重点
importThread.Start();
txtImportPath.Text = importPath;
}
public void ImportDialog()
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Excel文件|*.xls;*.xlsx";
if (open.ShowDialog() == DialogResult.OK)
{
importPath = open.FileName;
ReadExcelToTable(importPath);
UpdateArea();
}
}
![复制代码](https://img-blog.csdnimg.cn/img_convert/380cf082a4fda7bdd84917a69d026a7d.gif)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)