我在做一个程序,需要读取一个图像序列,比较耗时,UI卡死,于是开辟了一个线程执行这个耗时的操作;
在程序中,我创建了两个类,第一个是class1,它需要用子线程读取的数据初始化,然后是class2,他需要用class1来构造,而耗时操作用的就是class1中的一个loadfiles方法,在开辟新线程去执行loadfiles这个操作,由于主次线程同时执行,而这时class1还没有初始化好,class2又要使用class1,于是出现问题,请问如何让主线程等待次线程完成后继续执行(即class1被次线程初始化好,再在主线程中初始化class2),而且UI界面还不开始,或者请问如何解决这个问题使UI不卡死,谢谢

解决方案 »

  1.   

    如果calss2依赖于class1,那就必须同步,class1完成后,再去操作class2
      

  2.   

    如果是我  就把他写在一个线程中  等一完成后  继续做CLASS2做的事   太官方的词汇  我不会
      

  3.   

    http://apps.hi.baidu.com/share/detail/15598912
      

  4.   

    是进程话试试WaitForExit();,是线程的话可以考虑建一个监视线程。
      

  5.   


    这是一个经常遇到的误区。不是不可以阻塞,而是你把主线程阻塞起来只为让它等待一个多余的子线程操作,这等于是拿着多线程编程的幌子其实去模拟顺序操作。这种设计思路是你头脑中的“函数式编程”思路在左右你的判断力。你总是以为“调用函数,返回结果,再调用下一个函数,再.....”这种编程才是正宗。可是多线程不是这个思路,它的思路是你要预先把之后的事情作为委托回调注册给这个函数,然后你调用这个函数的操作一瞬间就完成了(因为它不过就是注册了一个子线程去将来去开始函数执行而已)。在回调方法中,如果处理了一部分数据之后,又要确保之后的某个操作又在界面主线程上执行,那么又可以Control.BeginInvoke方式再把剩下的内容注册给系统,而不用阻塞这当前子线程。
      

  6.   

    太复杂了,今天看到这样一段代码,
    DateTime time = DateTime.Parse("{6b25f59b-30dd-4b47-a739-10fc96df587e}");
    运行又通不过,大家看看{6b25f59b-30dd-4b47-a739-10fc96df587e}这是什么格式啊,从来没见过啊
      

  7.   

    等待另一个线程完成:AutoResetEvent/ManualResetEvent ,发送信号量Set/WaitOne决定是否继续.
    你说的UI卡死,是因为在执行某些代码时CPU被抢占,UI线程被挂起了。
    必须控制你的耗时代码的线程切换与调度。
      

  8.   

    使用backgroundworker看看哦,喵~~
    在这里啦 http://www.cnblogs.com/yiyisawa/archive/2008/11/24/1339826.html
      

  9.   

    lock(this)
    {
    }...
    monitor.enter(xxoo)