zoukankan      html  css  js  c++  java
  • WaitAll for multiple handles on a STA thread is not supported 解决方案

    封装一个MTA的WaitALL

    class MtaWaitAllWrapper {
            readonly WaitHandle[] waitHandles;
            readonly int millisecondsTimeout;
            bool waitResult;
            Exception error;
     
            MtaWaitAllWrapper(int millisecondsTimeout,
                params WaitHandle[] waitHandles) {
     
                if (waitHandles == null) throw new ArgumentNullException(@"waitHandles");
                this.waitHandles = waitHandles;
                this.millisecondsTimeout = millisecondsTimeout;
     
            }
     
            void WaitAll() {
                if ((waitHandles.Length > 1) && (Thread.CurrentThread.GetApartmentState() != ApartmentState.MTA)) {
     
                    Thread thread = new Thread(new ThreadStart(OnWaitAll));
                    thread.SetApartmentState(ApartmentState.MTA);
                    thread.Start();
                    thread.Join();
                } else {
                    OnWaitAll();
                }
            }
     
            void OnWaitAll() {
                try {
                    waitResult = WaitHandle.WaitAll(waitHandles, millisecondsTimeout, false);
                } catch (Exception ex) {
                    error = ex;
                }
            }
     
            public static bool WaitAll(int millisecondsTimeout,
                params WaitHandle[] waitHandles) {
     
                MtaWaitAllWrapper waitAllWrapper =
                    new MtaWaitAllWrapper(millisecondsTimeout, waitHandles);
     
                waitAllWrapper.WaitAll();
     
                if (waitAllWrapper.error != null) throw waitAllWrapper.error;
     
                return waitAllWrapper.waitResult;
            }
        }

  • 相关阅读:
    渗透测试靶场
    Ubuntu kylin优麒麟下配置Hadoop环境
    虚拟机win+IIs+asp+access搭建网站过程
    百度增强搜索
    渗透入门——术语概述
    api如何获取cookie
    还在纠结接口文档的事儿呢?
    为什么需要API管理平台
    自动生成接口文档的三种方式
    轻量化API测试工具整理
  • 原文地址:https://www.cnblogs.com/xixifusigao/p/2247943.html
Copyright © 2011-2022 走看看