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);
}
}
}
} 展开
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);
}
}
}
} 展开
展开全部
你要先定一个bool变量 Bool Is_Exit_Thread = fales;
然后在你要执行的线程需要的函数里面用到这个
private void Thread_Func()
{
while(!Is_Exit_Thread )
{
//这里写线程执行的功能代码
//满足某种条件的时候 你让 Is_Exit_Thread = true; 这样的话 这个线程就执行完毕了 停止销毁了
}
}
然后在你要执行的线程需要的函数里面用到这个
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网上有许多产品团购,便宜有口碑
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在启动线程按钮事件中加入一句就行了,如下。
private void button3_Click(object sender, EventArgs e)
{
try
{
th = new Thread(new ThreadStart(test));
th.Start();
}
catch (ThreadStateException ex)
{
MessageBox.Show(ex.Message);
}
}
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变量控制线程的停止,都是可以的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
调用Abort方法会销毁该线程,在启动线程的函数里,用以下两句就可以重新启动一个新的线程。弱弱的说下,你也够菜的。
th = new Thread(new ThreadStart(test));
th.Start();
th = new Thread(new ThreadStart(test));
th.Start();
更多追问追答
追问
恼羞滴说...
都说了,初学嘛!还要这样滴打击菜鸟...
最后...说声谢谢!
追答
不客气哈,好好学,我当初也是啥都不会,最好先看下线程相关的理论吧,理解最重要。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
线程停止后就销毁了,没有了。必须重新建立。
更多追问追答
追问
那么要怎么重新建立?请给一下代码,谢谢!
最好详细点的
追答
Thread th = new Thread(new ThreadStart(test));
你这个不是就建了一个吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询