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);
  }
}
原文地址:https://www.cnblogs.com/jes_shaw/p/1511505.html