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 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog