这种问题可以用多线程实现么?我做了一个winform的程序,有一些比较费时间的操作,执行这些操作时程序就如死了一般长时间不响应了,为了解决这个问题,我就在main()中创建另一个线程来执行这个操作,但是下一步操作需要这个线程运行的结果,也就是主线程需要等待,使用了Thread.Join(),但是一调用,程序就又“不响应”了,怎样才能运行这个比较费时操作的时候,使程序不至于“死掉”?,而且那个那个费时间的操作需要循环执行多次,

解决方案 »

  1.   

    不要阻塞线程
    试试sleep()
    或者干脆将suspend()
    然后等B结束后
    再将A resume();
      

  2.   

    在执行耗时线程开始时把主窗口所有可以操作的按钮等什么的Enable属性都设为false,等线程执行完后才把相应的控件的Enable属性变回true,这样既不阻塞主线程也不能执行下一步!!
      

  3.   

    楼主,看我的。
    public bool bFinished = false; //定义全局变量void Main()
    {
    bFinished = false;
    Thread thA = new ThreadStart(new ThreadStart(thProc));
    thA.Start();while(!bFinished)
    {
    //开始同步等待直到线程thA执行完
    Application.DoEvents();
    }}void thProc()
    {
    //执行n多代码bFinished = true; //这里要看!!!!!
    }
      

  4.   

    为了不过多占用CPU,可以在 在 while里面加入  ..Sleep(100);
      

  5.   

    用这个信号量,专门用来线程同步的;
    System.Threading.Manu*** (竟然记不得了,中文意思是(手动XX),不过在vs中,敲开头就出来了)
    这个类。
    先准备一下,调用reset()方法。主线程中调用waitone()方法就是使主线程阻塞。
    在另一个线程中调用它的set()方法,就让刚才阻塞的线程继续。你可以在顺利接受到参数后调用他继续。
      

  6.   

    while应该和join()一样把,在while的时候主线程照样忙于做while的事,没机会去处理别的事