using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;
namespace ddTest
{
public partial class Form1 : Form
{
private Thread t;
public Form1()
{
InitializeComponent();
t = new Thread(new ThreadStart(this.GoBut));
}
private void GoBut()
{
MessageBox.Show("线程测试");
System.Threading.Thread.Sleep(300);//暂停0.3秒
}
/// <summary>
/// 线程开始
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
t.Start();
}
/// <summary>
/// 线程暂停
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
t.Suspend();
}
/// <summary>
/// 线程恢复
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button5_Click(object sender, EventArgs e)
{
t.Resume();
}
/// <summary>
/// 线程结束
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button6_Click(object sender, EventArgs e)
{
t.Abort();
}
}
}
我做了4个按键,我想实现点一个按钮开始线程,一个暂停,一个恢复,一个结束,但是执行老是错误,提示线程 已退出 代码0(0x0)
你把这句
private void GoBut() { MessageBox.Show("线程测试"); System.Threading.Thread.Sleep(300);//暂停0.3秒 }
修改为
private void GoBut() { do { ... } while(true) }
试试。
非常感谢。可以的。但是比如我点了停止 t.Abort();,然后我重新点击t.Start();。那么是不是我在线程开始的时候需要新创建一个对象?
非常感谢。可以的。但是比如我点了停止 t.Abort();,然后我重新点击t.Start();,程序就会报错。那么是不是我在线程开始的时候需要新创建一个对象?
@87Super: Abort之后,线程就终止了。你在Start那儿需要判断一下。
@爱编程的大叔: 终止以后 如果要重新启动 是不是要重新 t = new Thread(new ThreadStart(this.GoBut));
你要了解一下 ManualResetEvent