三门峡城乡建设局网站,做网站需要什么设备,浙江住房和城乡建设部网站,百度商家入驻备忘 最近做一个功能#xff0c;从主界面进入另一个界面时#xff0c;数据量较大#xff0c;处理信息较多#xff0c;程序宕机。而且点击程序还会提示程序无响应。不得已用另一个线程显示界面。但在界面中使用控件时#xff0c;报错#xff1a;“System.Threading.Thread…备忘 最近做一个功能从主界面进入另一个界面时数据量较大处理信息较多程序宕机。而且点击程序还会提示程序无响应。不得已用另一个线程显示界面。但在界面中使用控件时报错“System.Threading.ThreadStateException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 在可以调用 OLE 之前必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。
参考处理的原理文章https://www.jb51.net/article/134002.htm 这两种无论哪种写法在代码执行的时候会报错具体报错为
“System.Threading.ThreadStateException”类型的未经处理的异常在 System.Windows.Forms.dll 中发生
其他信息: 在可以调用 OLE 之前必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记。 只有将调试器附加到该进程才会引发此异常。
这种情况在网上查询是说线程问题就是线程冲突了不知道该执行哪一个具体说法如下
COM提供的线程模型共有三种Single-Threaded ApartmentSTA 单线程套间、Multithreaded ApartmentMTA 多线程套间和Neutral Apartment/Thread Neutral Apartment/Neutral Threaded ApartmentNA/TNA/NTA 中立线程套间由COM提供。
STA 一个对象只能由一个线程访问相当于windows的消息循环实现方式也是通过消息循环的ActiveX控件、OLE文档服务器等有界面的都使用STA的套间。 MTA 一个对象可以被多个线程访问即这个对象的代码在自己的方法中实现了线程保护保证可以正确改变自己的状态。
所以创建和访问一个activex或者ole对象时必须设置线程模式为sta。
所以简单处理 创建的线程设置模式就可以了 t1.SetApartmentState(ApartmentState.STA);