我想用form中的按钮,控制有另一个类中的方法生成的线程,改如何实现。
举个例子:
这是类中的代码,通过方法write()获得一个字符串:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace ProTest
{
    class Thread1
    {
        public Thread1()
        { }       string str;
        public string my
        {
            get { return str; }
            set {str = value; }
        }        public void write()
        {
            for (int i = 0; i <= 400; i++)
            {
                str = str + i.ToString();                Thread.Sleep(10);
               
            }
            
        }       }
}在form中有开始(start)和暂停(pause)两个button,并用一个listbox来显示字符串  private void start_Click(object sender, EventArgs e)
        {            Thread1 haha = new Thread1();            t = new Thread(new ThreadStart(haha.write));
            t.Start();
            
            while (t.IsAlive||t.ThreadState.ToString()=="Sleepping")
            {            }
            this.listBox1.Items.Add(haha.my);
     }现在想用pause按钮来控制线程的暂停,并返回当前的字符串值,直接写click事件,没有反应,不知改如何操作,请大家帮忙!

解决方案 »

  1.   

    用个Mutex控制线程的运行和挂起
      

  2.   

    to uadam能说得再具体一点吗?
      

  3.   

    要在 private   void   Pause_Click(object   sender,   EventArgs   e)里面暂停private   void   start_Click(object   sender,   EventArgs   e)里面的线程的话,你得将其中的Thread1   haha   =   new   Thread1(); 
    声明到函数外面来,这样就可以了
      

  4.   

    to ghost6000:好像不行,Thread1       haha       =       new       Thread1();  haha是个对象,不是线程,我的线程
    是个公共变量t
      

  5.   

    while   (t.IsAlive ¦ ¦t.ThreadState.ToString()== "Sleepping ") 
                            {                         }
    你的程序一直在这个时间中执行吧 
      

  6.   

    应该在Write()中把t结束了吧,要不那个循环怎么能结束
      

  7.   

    恩,这样可以控制了,但如果我想要进程完成了在执行下面的语句要怎么来写呢,如果不用while的话
      

  8.   

    class   Thread1
            {
                    public   Thread1()
                    {   }             
                  string   str;
                    
                    AutoResetEvent _event = new AutoResetEvent(true);
                    public void Pause()
                    {
                        _event.Reset();
                    }
                    public void Run()
                    {                   
                        _event.Set();
                    }
                    public   string   my
                    {
                            get   {   return   str;   }
                            set   {str   =   value;   }
                    }                public   void   write()
                    {
                            for   (int   i   =   0;   i   <=   400;   i++)
                            {
                                    _event.WaitOne();
                                    str   =   str   +   i.ToString();
                                    Thread.Sleep(10);                             
                            }
                           
                    }              } 
    最后要把_event.Close()了
      

  9.   

    好像不行啊,我的意思是让他按照顺序进行,如代码中所示,一定要t执行完毕之后才执行 MessageBox.Show("haha");      private void button1_Click(object sender, EventArgs e)
            {
                Thread1 haha = new Thread1();
               
                t = new Thread(new ThreadStart(haha.write));
                t.Start();                        MessageBox.Show("haha");            this.button4.Enabled = false; 
            }
      

  10.   

    你在函数write里放一个AutoResetEvent,在MessageBox.Show( "haha "); 之前去等这个AutoResetEvent.这样不就可以了吗,haha线程执行不完是不会调用MessageBox的
      

  11.   

    我不想在线程的内部加控制语句
    假设我有两个或多个线程:thread1,thread2...
    想在主程序里面让这些线程按顺序运行下去,要怎么实现?
      

  12.   

    就在方法里用AutoResetEvent   控制贝有什么不好