zoukankan      html  css  js  c++  java
  • WaitAll for multiple handles on a STA thread is not supported. (原)

          在开发winform时,碰到过必须把Main设置成MTA thread方式,但有时却有些程序不支持使用的情况,如剪贴板,于是乎使用以下方法解决
     Thread t = new Thread(new ThreadStart(Method));
    t.SetApartmentState(ApartmentState.STA);
    t.Start();
     
    即通过设置为ApartmentState.STA达到解决目的。
    后来却碰到Winform中的AlloDrop设置为True时,出现下以错误
    WaitAll for multiple handles on a STA thread is not supported
    似乎还是得标识Main为STAThread方式。因此只好寻求反向解决方式,经过一番折腾使用以下办法得到解决,
    有如如释重负
    private void WaitAll(WaitHandle[] waitHandles) {
      if (Thread.CurrentThread.ApartmentState == ApartmentState.STA) {
        // 使用foreach,在多线程中等待每一个句柄
        foreach(WaitHandle myWaitHandle in waitHandles) {
          WaitHandle.WaitAny(new WaitHandle[]{myWaitHandle});
        }
      }
      else {
        WaitHandle.WaitAll(waitHandles);
      }
    }
  • 相关阅读:
    Ignite、Vertx
    Spring boot ConditionalOnClass原理解析
    SPI
    Redis (总结)
    Mysql 线程池 ===
    Mysql JDBC-mysql-Driver queryTimeout分析
    Java网关服务-AIO(三)
    Java网关服务-AIO(二)
    Java网关服务-AIO(一)
    Java nio Server端示例
  • 原文地址:https://www.cnblogs.com/jes_shaw/p/1511505.html
Copyright © 2011-2022 走看看