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 WgKey { public partial class XCTest : Form { //通知一个或多个正在等待的线程已发生事件。false默认不启动 默认true启动 static ManualResetEvent _mre = new ManualResetEvent(false); private Thread t; public XCTest() { InitializeComponent(); } private void XCTest_Load(object sender, EventArgs e) { //创建超线程 t = new Thread(new ThreadStart(this.GoBut)); } private void button1_Click(object sender, EventArgs e) { //开启线程 t.Start(); } /// <summary> /// 线程启用 /// </summary> private void KSXC() { _mre.Set(); } /// <summary> /// 暂停线程 /// </summary> private void ZTXC() { _mre.Reset(); } private void GoBut() { while (true) { //阻止当前线程,直到收到信号。 _mre.WaitOne(); MessageBox.Show("1"); System.Threading.Thread.Sleep(100);//暂停0.1秒 MessageBox.Show("2"); } //线程开始 t.Start(); //线程暂停 t.Suspend(); //线程恢复 t.Resume(); //线程结束 t.Abort(); } } }
现在遇到了2个问题。
第一个问题:
GoBut()方法里的MessageBox.Show("2");不会执行。
第二个问题:
比如我的项目生成了test.exe,运行了这个程序以后,把这个程序关闭掉,但是进程test.exe不会消失一直存在。。
能具体一点吗?怎么结束text.exe?
this.Close();么?
@87Super: 可以使用Process类,请自行百度
@刘宏玺: 我看了,但是我感觉不需要用Process。应该是代码上有不完全的地方。
@87Super: 那你试试在关闭的事件里面加入这句话
System.Environment.Exit(0);
@刘宏玺: 找到解决办法了。
//设置为后台进程,这样当主线程退出时,这个线程就会退出 t.IsBackground = true;
你的问题如何产生,你KSXC和ZTXC又如何使用
在窗体的Close事件里面加一句: t.Abort();
因为你的线程还挂在那里,当然不会退出了。你需要终结掉它