解决方案 »

  1.   

    这是一个多线程编程基本的问题。建议你找多线程的书看一看
    你可以用Lock、Monitor来解决这个问题
      

  2.   

    你在ttt1的最后一行代码调用ttt2就行了。
      

  3.   

    using System;
    using System.Threading;namespace ConsoleApplication1
    {
        class Program
        {
            static AutoResetEvent e;
            static void Main(string[] args)
            {
                e = new AutoResetEvent(false);
                Thread t1 = new Thread(Work1);
                Thread t2 = new Thread(Work2);
                t1.Start();
                t2.Start();
            }        static void Work1()
            {
                Console.WriteLine("1");
                e.Set();
            }        static void Work2()
            {
                e.WaitOne();
                Console.WriteLine("2");
            }
        }
    }
      

  4.   

    可以使用task啊 Task t = new Task(() => {
                    for (int i = 0; i < 10; i++)
                    {                    ss += "1111\r\n";
                    }
                    Console.WriteLine(ss);
                });
                t.Start();
                Task t2 = t.ContinueWith(task => {
                    for (int i = 0; i < 10; i++)
                    {                    ss += "2222\r\n";
                       
                    }
                    Console.WriteLine(ss);
                });
         
      

  5.   

    嗯,要是我在ttt1里边没有加t1.join()的话是可以的,为什么加了就不行? 我如果想要线程t1结束之后再执行主线程要怎么办? 加了这句话之后点击按钮就没任何效果了,也没有假死现象,能给解释一下吗?麻烦了 .  
    还有,为什么我在ttt1里边加ttt2方法不会假死?ttt2不是没有放在子线程不是吗?应该会假死呀. 还是说因为ttt1是子线程,在子线程里边调用方法是不会影响到主线程的吗?
      

  6.   

    加入join()之后会不正常,但是把Invoke变成BeginInvoke就正常了 有人能解释一下吗? 就这个问题
      

  7.   

    我如果想要线程t1结束之后再执行主线程要怎么办?
    那你就直接将t1的函数放主线程里就好了嘛,开多线程还有什么意义啊.
    让主线程去等待子线程,这没有道理.
    不过也不是不能实现.
    你在主线程里写while(tt1.IsAlive){sleep(1000);}
      

  8.   

    好像刚刚我说错了 , 还是不行,我就是想调用ttt1结束之后再执行主线程的东西.            t1 = new Thread(ttt1);
                t1.Start();
               // t1.Join();
                //t2 = new Thread(ttt2);
                //t2.Start();
                MessageBox.Show("1");//这句话要在方法结束之后显示,要把Join()放在哪里呢?
      

  9.   

    进度条完全可以用timer处理,线程只要把处理的百分比存在全局变量里,timer去取这个变量就行了.
    你将主线程停了,不就直接死了么,还用假死?
      

  10.   

    跟JOIN没关系.怎么老纠结JOIN.
    MessageBox.Show("1");当然是放主线程里了,子线程不可能直接蹦出这个来.
    你可以在timer里判断线程是否执行完了,执行完就弹出个对话框.
    当然你还需要一个bool型的变量来控制一下,让它只弹出一次,否则timer每执行一次就弹出一个
      

  11.   

    跟JOIN没关系.怎么老纠结JOIN.
    MessageBox.Show("1");当然是放主线程里了,子线程不可能直接蹦出这个来.
    你可以在timer里判断线程是否执行完了,执行完就弹出个对话框.
    当然你还需要一个bool型的变量来控制一下,让它只弹出一次,否则timer每执行一次就弹出一个子线程里怎么会不能跳出弹出框呢???? 晕,不过这个问题我解决了,我是另外开了一个线程,不在Button点击事件里边操作了,我非常奇怪为什么这样就可以,也不想继续问下去了,估计你们要烦我了.....结贴/.
      

  12.   

    跟JOIN没关系.怎么老纠结JOIN.
    MessageBox.Show("1");当然是放主线程里了,子线程不可能直接蹦出这个来.
    你可以在timer里判断线程是否执行完了,执行完就弹出个对话框.
    当然你还需要一个bool型的变量来控制一下,让它只弹出一次,否则timer每执行一次就弹出一个每次我提的线程问题你都很积极啊,分多给你点~