曲阜网站制作,网站建设电脑大多怎么办,沈阳做网络推广的公司,四大商业网站不支持一个 STA 线程上针对多个句柄的 WaitAll。 题设: 在.NET开发多线程控制台程序过程中,由于业务要求,需要实现一次扫描多笔订单,然后,通过多线程实现并发提交的逻辑.因此,在控制台程序中采用了多线程记录.由于下一次操作必须等待所有的记录并发提交完成后,才能… 不支持一个 STA 线程上针对多个句柄的 WaitAll。 题设: 在.NET开发多线程控制台程序过程中,由于业务要求,需要实现一次扫描多笔订单,然后,通过多线程实现并发提交的逻辑.因此,在控制台程序中采用了多线程记录.由于下一次操作必须等待所有的记录并发提交完成后,才能进行下一步循环操作.在多线程操作后,使用了WaitAll命令.但是在此过程中,报异常不支持一个STA 线程上针对多个句柄的WaitAll .分析: 经过研究MSDN,发现,在控制台程序的每个主函数Main之前,都有一个[STAThread]方法属性,该属性标识当前控制台程序的线程模型为单线程,因此在该模型下编写多线程程序,并不能很好的兼容.具体的说明如下: STAThreadAttribute 指示应用程序的 COM 线程模型是单线程单元 (STA)。 将此属性应用于入口点方法C# 和 Visual Basic 中的 Main() 方法。它对其他方法无效。若要设置在代码中启动的线程的单元状态请在启动线程前使用 Thread..::.SetApartmentState 方法。 注意 在 .NET Framework 1.0 版和 1.1 版中在启动线程之前设置 Thread..::.ApartmentState 属性。 COM 线程模型只适用于使用 COM interop 的应用程序。如果将此属性应用到不使用 COM interop 的应用程序将没有任何效果。 COM 线程模型可设置为单线程单元或多线程单元。如果应用程序线程实际调用了 COM 组件则仅为 COM interop 初始化该线程。如果没有使用 COM interop则不初始化该 在此说明中,有明确标识COM 线程模型只适用于使用 COM interop 的应用程序。如果将此属性应用到不使用 COM interop 的应用程序将没有任何效果。因此,尝试将该属性删除,编译运行成功.问题解决. 解决: 因为在默认的.NET程序在创建时都默认被设置线程模型为单线程单元,即STA,故在不涉及到COM相关操作的情况下,可以去掉控制台程序Main 上的[STAThread]属性即可支持多线程操作. 转载于:https://www.cnblogs.com/tigerjacky/archive/2011/05/10/2013745.html