您的位置:首页 > 编程语言 > C#

C#等待多线程报错WaitAll for multiple handles on a STA thread is not supported

2013-09-02 16:31 288 查看
 在开发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);

  }

}

转载 http://www.cnblogs.com/jes_shaw/archive/2009/06/26/1511505.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐