多线程下调用ShowDialog时异常原因及解决办法
2023-09-11 14:16:45 时间
提示在可以调用OLE之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute
导入导出功能,在调用ShowDialog时的错误,解决办法如下:
WinForm窗体的入口点:
/// <summary> /// 应用程序的主入口点加入 [STAThread]。 /// </summary> [STAThread] private static void Main(String[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new LoginForm()); }
修改如下:Thread线程调用SetApartmentState(ApartmentState.STA)设置 //重点
此种报错情况下就不能用Task创建线程了,因为Task没有SetApartmentState方法
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(); } }
相关文章
- Androidi性能优化之多线程和同步
- Java多线程--认识多线程(Thread、Runnable)
- 多线程基础(六)GCD基础
- 了解Unity中的多线程及使用多线程
- 目录 1. 数据库优化漏斗法则1 2. 常见优化手段2 2.1. 索引2 2.2. 分页 只返回需要的字段2 2.3. 批处理2 2.4. 其他 sp 多线程等2 3. 索引类型 n
- js多线程
- Android FileDownloader框架多线程下载
- Qt多线程编程实例
- 借助SimpleDateFormat来谈谈java里的多线程不安全
- 【动画详解原理系列】2.多线程并发编程与锁
- 高并发之——线程与多线程
- 多线程
- WPF 多线程异常抛送到UI线程