日期:2014-05-20  浏览次数:20690 次

如何把线程的生成,启动,中止放在同一个事件中?
我想实现的是,   一个button的click事件发生时,检测线程是存在,如果不存在就创建,存在的话,检测是不是在运行中,如果运行就中止,如果中止就运行,应该怎样实现哪?

下面代码每次都会启动一个新的线程,是不对,应该怎么改啊?
                private   void   button1_Click(object   sender,   EventArgs   e)
                {
                        Thread   t   =   new   Thread(new   ThreadStart(test));
                        if   (t.ThreadState!=ThreadState.Running)
                        {
                                t.Start();
                                //t.Abort();
                                //t.Join();
                                //MessageBox.Show(t.IsAlive.ToString());
                        }
                        else
                        {
                                t.Abort();
                        }
                }

------解决方案--------------------
我觉得首先你得能传递要判断的Thread实例进来,可以把实例放到类变量里头,
然后在CLICK事件里头可以轻松的操作这个Thread实例.
------解决方案--------------------
private string state;
private volatile bool flag=false;
state= "init ";
public void loop()
{
while(flag)
{
switch(state)
{
case "init ":
//县城开始
break;
case "runing ":
//运行
break;
case "shutdown ":
//关闭
break;

}

}

}
------解决方案--------------------

//必须在函数外边定义一个全局变量

private Thread t = null ;

.....................

private void button1_Click(object sender, EventArgs e)
{
if(t==null)
{
t = new Thread(new ThreadStart(test));
t.Start();
}
else
{
if(t.IsAlive ==true)
{
t.Abort();
t.Join();
MessageBox.Show( "Thread is Abort! ");
}
else
{
t.Start();
MessageBox.Show( "Thread is Start! ");
}
}
}