hardtoking 2017-08-21 17:51 采纳率: 0%
浏览 1044
已结题

C#异步线程回调问题,请大神帮忙

问大神一个关于异步线程回调的问题

程序运行后执行主线程的第一次循环,执行到代码A后,调用线程B异步执行 主线程继续执行
主线程第一次循环执行完后,执行第二次循环, 然后执行到代码A后 判断B线程的执行状态,如果B线程没有完成,则主线程等待B线程执行完成后再继续向下执行
以此反复
我这边写了B线程回调函数中将判断条件设为true,然后在B线程前面对这个条件进行了判断,发现没有用 不知道怎么回事儿
大神帮忙看下怎么做才能实现我想要的效果

  • 写回答

2条回答 默认 最新

  • Go 旅城通票 2017-08-22 01:12
    关注
    
            bool ok = false, bInit = false;
            Thread b = null;
            object locker = new object();
    
            Thread a = new Thread(new ThreadStart(delegate()
            {
                while (true)
                {
                    //.......
    
                    if (b == null)
                    {
                        b = new Thread(new ThreadStart(delegate()
                        {
                            //b代码,如果成功设置ok为true
                            //lock (locker) { ok = true; }
                        }));
                        b.Start();
                    }
                    if (bInit)
                    {
                        lock (locker)
                        {
                            while (!ok) Thread.CurrentThread.Join(500);//未执行完毕挂起
                        }
                    }
                    bInit = true;
                    //其余代码
                }
            }));
            a.Start();
    
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记