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);
      }
    }
  • 相关阅读:
    基本数据结构:链表(list)
    字符串函数
    TCHAR
    开源库链接
    视频 链接
    tabbar
    加密
    安全类链接,https
    资本
    审核 -链接 - 发布证书
  • 原文地址:https://www.cnblogs.com/jes_shaw/p/1511505.html
Copyright © 2011-2022 走看看