• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
只是向上走
采菊东篱下,悠然见南山。
博客园    首页    新随笔    联系   管理    订阅  订阅
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);
  }
}
posted on 2009-06-26 10:59  jes.shaw  阅读(1457)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3