delegate void sfile();
                 .....
                sfile f=new sfile(Savefile);//Savefile是执行保存文件的方法
                Thread th = new Thread(new ThreadStart(f));
                th.SetApartmentState(ApartmentState.MTA);
                th.Start();
                //这是一个没有参数的线程执行,我怎么才知道这个线程th执行完了呢??

解决方案 »

  1.   

    最好自定义一个事件,在线程出口处引发。
    ThreadExit事件不会马上触发,不好用。
      

  2.   

    好想有个 th.Join();这个方法加在你的th.Strat()后面,要把th这个进程执行完了后在执行以后的代码...
      

  3.   


    不行,加th.Join();界面卡住了,不能进行其它操作
    我想线程在执行中(也就是后台),界面不卡,执行完 了再刷新一下界面的控件,就是你说的th.Join();后的代码
      

  4.   

    那你就加一个判断语句,来判断那个线程的状态,如果执行完成了,在执行以后的代码段:
    如:if(th.ThreadState.ToString()=="Stopped")
          {
            //以后的代码
          }
      

  5.   

    线程停止有多种状态:if(th.ThreadState==ThreadState.Aborted|ThreadState.Stopped|
    ThreadState.Suspended|ThreadState.Unstarted){
       //你的操作
    }
      

  6.   

    //Add code line before your function:
     
    public bool SubThreadEnded=false;//MainThread:void sfile(){
        Thread th = new Thread(SubThread);
        th.Start();
        while(SubThreadEnded==false)
      {
         Tread.Sleep(100);
      }
       SubThreadEnded=false;
    }//SubThread:
    private void SubThread(){
       .
       .
       .
       //last line:
       SubThreadEnded=true;
    }
        
      

  7.   

        public partial class Form1 : Form
        {
            public struct ThreadExitArgs
            {
                public int ThreadID;
                public string ThreadName;
            }
            public delegate void ThreadExitHandle(string e);
            public event ThreadExitHandle ThreadExit;
            private event ThreadExitHandle ThreadExitPretreat;
            System.Threading.Thread thread;        public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                this.ThreadExit += new ThreadExitHandle(Form1_ThreadExit);
                this.ThreadExitPretreat += new ThreadExitHandle(Form1_ThreadExitPretreat);
            }        void Form1_ThreadExitPretreat(string e)
            {
                this.Invoke(new ThreadExitHandle(Form1_ThreadExit), new object[] { e });
            }        void Form1_ThreadExit(string e)
            {
                MessageBox.Show(e, "线程结束!");
            }        private void button1_Click(object sender, EventArgs e)
            {
                thread = new System.Threading.Thread(new System.Threading.ThreadStart(newthread));
                thread.Name = "test";
                thread.Start();
            }        private void newthread()
            {
                System.Console.WriteLine("没事写着玩");
                ThreadExitPretreat(System.Threading.Thread.CurrentThread.Name);
            }
        }
      

  8.   

    Try to set the priority of every thread.
      

  9.   

    starj1's method can be tried
      

  10.   

    所有 win32 核心对象, 都是 WaitHanle, 线程是内核对象.虽然.net 线程对象是 platform 无关的, 但微软的实现一直是 1-1 对应的.
      

  11.   

    join()方法:主线程等待子线程的结束。
      

  12.   

    实在是搞不懂你的耗 时的方法是那一个??如我有一个耗时的方法SaveFile()放大那里呀??
      

  13.   

    PSP:
    System.Console.WriteLine("没事写着玩"); 
    这句就是做事的,把这句改成你要的程序段就行了。