我怎么才知道这个线程th执行完了呢?? delegate void sfile(); ..... sfile f=new sfile(Savefile);//Savefile是执行保存文件的方法 Thread th = new Thread(new ThreadStart(f)); th.SetApartmentState(ApartmentState.MTA); th.Start(); //这是一个没有参数的线程执行,我怎么才知道这个线程th执行完了呢?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最好自定义一个事件,在线程出口处引发。ThreadExit事件不会马上触发,不好用。 好想有个 th.Join();这个方法加在你的th.Strat()后面,要把th这个进程执行完了后在执行以后的代码... 不行,加th.Join();界面卡住了,不能进行其它操作我想线程在执行中(也就是后台),界面不卡,执行完 了再刷新一下界面的控件,就是你说的th.Join();后的代码 那你就加一个判断语句,来判断那个线程的状态,如果执行完成了,在执行以后的代码段:如:if(th.ThreadState.ToString()=="Stopped") { //以后的代码 } 线程停止有多种状态:if(th.ThreadState==ThreadState.Aborted|ThreadState.Stopped|ThreadState.Suspended|ThreadState.Unstarted){ //你的操作} //Add code line before your function: public bool SubThreadEnded=false;//MainThread:void sfile(){ Thread th = new Thread(SubThread); th.Start(); while(SubThreadEnded==false) { Tread.Sleep(100); } SubThreadEnded=false;}//SubThread:private void SubThread(){ . . . //last line: SubThreadEnded=true;} public partial class Form1 : Form { public struct ThreadExitArgs { public int ThreadID; public string ThreadName; } public delegate void ThreadExitHandle(string e); public event ThreadExitHandle ThreadExit; private event ThreadExitHandle ThreadExitPretreat; System.Threading.Thread thread; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.ThreadExit += new ThreadExitHandle(Form1_ThreadExit); this.ThreadExitPretreat += new ThreadExitHandle(Form1_ThreadExitPretreat); } void Form1_ThreadExitPretreat(string e) { this.Invoke(new ThreadExitHandle(Form1_ThreadExit), new object[] { e }); } void Form1_ThreadExit(string e) { MessageBox.Show(e, "线程结束!"); } private void button1_Click(object sender, EventArgs e) { thread = new System.Threading.Thread(new System.Threading.ThreadStart(newthread)); thread.Name = "test"; thread.Start(); } private void newthread() { System.Console.WriteLine("没事写着玩"); ThreadExitPretreat(System.Threading.Thread.CurrentThread.Name); } } Try to set the priority of every thread. starj1's method can be tried 所有 win32 核心对象, 都是 WaitHanle, 线程是内核对象.虽然.net 线程对象是 platform 无关的, 但微软的实现一直是 1-1 对应的. join()方法:主线程等待子线程的结束。 实在是搞不懂你的耗 时的方法是那一个??如我有一个耗时的方法SaveFile()放大那里呀?? PSP:System.Console.WriteLine("没事写着玩"); 这句就是做事的,把这句改成你要的程序段就行了。 如何截取一段内容里的信息 询问一个分类统计的问题 鼠标滚轮事件问题 数据类型转换的问题 做C#,.net这行大部分人一般工资到个什么价位就稳定不涨了! 网络爬虫 千分赠送 请教:C# 截词算法 关于pdfsharp操作pdf文档问题 同一个项目,可以同时使用asp和apsx开发吗? upto(阿球) 请进 关于邮件服务器的一点疑问 Windows mobile开发 “System.Windows.Forms.ListView”不包含“SelectedItems”的定义
ThreadExit事件不会马上触发,不好用。
不行,加th.Join();界面卡住了,不能进行其它操作
我想线程在执行中(也就是后台),界面不卡,执行完 了再刷新一下界面的控件,就是你说的th.Join();后的代码
如:if(th.ThreadState.ToString()=="Stopped")
{
//以后的代码
}
ThreadState.Suspended|ThreadState.Unstarted){
//你的操作
}
public bool SubThreadEnded=false;//MainThread:void sfile(){
Thread th = new Thread(SubThread);
th.Start();
while(SubThreadEnded==false)
{
Tread.Sleep(100);
}
SubThreadEnded=false;
}//SubThread:
private void SubThread(){
.
.
.
//last line:
SubThreadEnded=true;
}
{
public struct ThreadExitArgs
{
public int ThreadID;
public string ThreadName;
}
public delegate void ThreadExitHandle(string e);
public event ThreadExitHandle ThreadExit;
private event ThreadExitHandle ThreadExitPretreat;
System.Threading.Thread thread; public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
this.ThreadExit += new ThreadExitHandle(Form1_ThreadExit);
this.ThreadExitPretreat += new ThreadExitHandle(Form1_ThreadExitPretreat);
} void Form1_ThreadExitPretreat(string e)
{
this.Invoke(new ThreadExitHandle(Form1_ThreadExit), new object[] { e });
} void Form1_ThreadExit(string e)
{
MessageBox.Show(e, "线程结束!");
} private void button1_Click(object sender, EventArgs e)
{
thread = new System.Threading.Thread(new System.Threading.ThreadStart(newthread));
thread.Name = "test";
thread.Start();
} private void newthread()
{
System.Console.WriteLine("没事写着玩");
ThreadExitPretreat(System.Threading.Thread.CurrentThread.Name);
}
}
System.Console.WriteLine("没事写着玩");
这句就是做事的,把这句改成你要的程序段就行了。