试试BackGroudWork(Event: DoWork,RunWorkerCompleted)

解决方案 »

  1.   

    不是很明白你陈述的问题,不过你的问题我想可以用Event来解决。
      

  2.   

    to haiwangstar  event是通知机制,解决不了to changjiangzhibin   backgroundworker是异步方式,我现在主要的问题是一个线程开了一个以线程方式封装的事件(我们一般的事件都是在主线程上的,而我这里是在辅线程上的),我要达到的目标是线程可以等待事件执行完成再执行后续操作。
      

  3.   

    我现在的问题困惑在,如果辅线程是我主线程自己启动的,我可以在启动后控制辅线程的执行,但现在问题的关键是我的辅线程是主线程一个相关操作导致CLR后台以事件的方式启动了一个线程,我不太清楚,如果是CLR后台以事件方式启动的线程,如果控制可以让主线程停止,直到等到事件结束在返回主线程继续执行。
      

  4.   

    我现在的问题困惑在,如果辅线程是我主线程自己启动的,我可以在启动后控制辅线程的执行,但现在问题的关键是我的辅线程是主线程一个相关操作导致CLR后台以事件的方式启动了一个线程,我不太清楚,如果是CLR后台以事件方式启动的线程,如果控制可以让主线程停止,直到等到事件结束在返回主线程继续执行。
      

  5.   

    .net不熟,也没有看过你的S对象是如何实现的,估计是因为datareceived事件本身是一个独立线程(类似于一般的网络控件实现),因为A线程只依赖于B线程的结束,并不受datareceived事件线程(假设为C线程)的影响,所以会有这样的问题,因为你的join只解决了A和B的同步问题,没有考虑到C的同步问题。
    建议解决方案:不要用join,而改用一个供三个线程使用的同步锁。
    如果A只是等待这个C结束的话,可以这样做:
    创建一个Event,然后在A启动B之前RESET这个EVENT,在启动B之后waitfor这个Event。
    同样,B线程在触发datareceived事件之后也waitfor这个Event。
    最后在C线程结束前Set这个Event即可。
    如果A必须等到B结束的话,B就没有存在的必要了,反正A和B根本没有并发执行,多搞个线程出来是自找麻烦。
      

  6.   

    是不是就是"生产者/消费者"问题?一个线程A执行,产生结果,通知另一线程B已产生结果了,让B去处理,B取得A产生的结果,再通知A结果已经取起,可以再次产生一个结果?的确没有看明白你描述的问题,
      

  7.   

     如果我没理解错的话,楼主的意思大概时这样   Main Thread
        ------>open new Thread
               (new thread waiting)
                         ----->trigger new Event
                                         ----Event doing somethings
               (new thread resume)
       想在线程中判断靠驱动的事件是否执行完毕,完毕后线程才继续执行,时这个意思么?   
       如果是的话,确实不太好处理,可以考虑lock某个对象,自己去标记所触发的event是否执行完毕了,没有完毕之前,不要释放改对象...