C#线程为什么只能启动一次?(20分)

初学C#,不太明白...请问,如何才能让终止的线程再次执行(不是挂起线程后再恢复),即如图,单击"启动线程",线程启动后,"挂起线程"\"恢复线程"都没问题,但单击"终止... 初学C#,不太明白... 请问,如何才能让终止的线程再次执行(不是挂起线程后再恢复),即如图,单击"启动线程",线程启动后,"挂起线程"\"恢复线程"都没问题,但单击"终止线程"后,再想单击"启动线程"就报错了...

using System.Threading;

namespace 线程测试
{
public partial class Form1 : Form
{
private static int count = 0;
private bool flag = true;
private Thread th = new Thread(new ThreadStart(test));

public static void test()
{
while (true)
{
count++;
//MessageBox.Show(count.ToString());

Thread.Sleep(1000);
}
}

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
try
{
if (flag)
{
button1.Text = "恢复线程";
th.Suspend();
label1.Text = count.ToString();
}
else
{
button1.Text = "挂起线程";
th.Resume();
}
flag = !flag;
}
catch (ThreadStateException ex)
{
MessageBox.Show(ex.Message);
}
}

private void button2_Click(object sender, EventArgs e)
{
try
{
//th.Resume();
th.Abort();
MessageBox.Show("已终止线程,count:" + count,"终止线程");
}
catch(ThreadStateException ex)
{
MessageBox.Show(ex.Message);
}
}

private void Form1_Load(object sender, EventArgs e)
{
//th.Start();
timer1.Enabled = true;
}

private void label1_Click(object sender, EventArgs e)
{

}

private void timer1_Tick(object sender, EventArgs e)
{
label1.Text = count.ToString();
}

private void button3_Click(object sender, EventArgs e)
{
try
{
th.Start();
}
catch (ThreadStateException ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
展开
 我来答
七终多E
2011-06-28 · TA获得超过1.4万个赞
知道大有可为答主
回答量:3756
采纳率:46%
帮助的人:3444万
展开全部
你要先定一个bool变量 Bool Is_Exit_Thread = fales;
然后在你要执行的线程需要的函数里面用到这个
private void Thread_Func()
{
while(!Is_Exit_Thread )
{
//这里写线程执行的功能代码
//满足某种条件的时候 你让 Is_Exit_Thread = true; 这样的话 这个线程就执行完毕了 停止销毁了
}

}
更多追问追答
追问
嗯!我试一下!!谢谢!!
追答
搞定没有
匿名用户
2011-07-06
展开全部
打开global.asax.cs,在Application_Start里面调用你的XX.Start()方法。Application_Start只在网站第一次被请求时才执行一次。
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
opbyte
2011-06-29
知道答主
回答量:9
采纳率:0%
帮助的人:8603
展开全部
在启动线程按钮事件中加入一句就行了,如下。

private void button3_Click(object sender, EventArgs e)
{
try
{
th = new Thread(new ThreadStart(test));
th.Start();
}
catch (ThreadStateException ex)
{
MessageBox.Show(ex.Message);
}
}
追问
谢谢!!  这个早试过了,得到的结果是线程不停的创建,就算后面想终止也终止不了.
追答
在创建一个新线程时判断一下上一个线程是否终止了嘛。
if(!th.IsAlive) {

th = new Thread(new ThreadStart(test));
th.Start();

}else{
MessageBox.Show("请先停止线程");

}

有了这些方法就能灵活控制线程,包括上面几位说的用bool变量控制线程的停止,都是可以的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yzfcer
2011-06-28 · 超过14用户采纳过TA的回答
知道答主
回答量:32
采纳率:0%
帮助的人:32.7万
展开全部
调用Abort方法会销毁该线程,在启动线程的函数里,用以下两句就可以重新启动一个新的线程。弱弱的说下,你也够菜的。
th = new Thread(new ThreadStart(test));
th.Start();
更多追问追答
追问
恼羞滴说...
都说了,初学嘛!还要这样滴打击菜鸟...

最后...说声谢谢!
追答
不客气哈,好好学,我当初也是啥都不会,最好先看下线程相关的理论吧,理解最重要。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JINYUTTT
2011-06-28 · TA获得超过178个赞
知道小有建树答主
回答量:792
采纳率:0%
帮助的人:554万
展开全部
线程停止后就销毁了,没有了。必须重新建立。
更多追问追答
追问
那么要怎么重新建立?请给一下代码,谢谢!
最好详细点的
追答
Thread th = new Thread(new ThreadStart(test));
你这个不是就建了一个吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式