• 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;
            }
        }

  • 相关阅读:
    正则表达式 ^
    jQuery的加法运算,val()获取的结果相加变成了字符串连接。
    mssql 取数据指定条数(例:100-200条的数据)
    css样式大全(整理版)
    50个技巧提高你的PHP网站程序执行效率
    ASP版_阿里大于短信API Demo
    FusionCharts的使用方法(超详细)
    FusionCharts参数说明 (中文)
    web服务器选择Apache还是Nginx
    反向代理服务器的工作原理
  • 原文地址:https://www.cnblogs.com/xixifusigao/p/2247943.html
Copyright © 2020-2023  润新知