hardtoking
hardtoking
采纳率31.4%
2017-08-21 17:51 浏览 1.0k

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

10

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答 默认 最新

  • showbo GoCityPass新加坡曼谷通票 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();
    
    点赞 1 评论 复制链接分享
  • xia_yu1021 xia_yu1021 2017-08-30 02:40

    1.线程有个IsAlive属性可以判断是否结束;
    2.可以使用一个全局变量来标识当前线程B是否在执行,在启动线程B之前判断即可;

    点赞 评论 复制链接分享

相关推荐