首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么设置线程完全结束后运行其他内容

2012-09-02 
如何设置线程完全结束后运行其他内容?C# codepublic delegate void delegateHandle(object sender,EventAr

如何设置线程完全结束后运行其他内容?

C# code
public delegate void delegateHandle(object sender,EventArgs e);public partial class FCPMClient : Form{   public event delegateHandle onFinished;   private Thread thread = null;   public FCPMClient()   {      InitializeComponent();   }   private void Form1_Load(object sender, EventArgs e)   {      thread = new Thread(new ThreadStart(fun1));      thread.Start();      this.onFinished += new delegateHandle(fun2);   }   private void fun1(){      onFinished(this, new EventArgs());   }   private void fun2(object sender, EventArgs e){      thread.Abort();   }}


我现在的需求是在某一个线程结束后运行某些代码,但我的程序类似上边这些,调用 fun2 时,实际上线程还在进行,并没有完全结束,这个要怎么解决?

[解决办法]
看你想怎么用多线程序:
1.如果是compute bound,用Task.ContinueWith或TaskFactory.ContinueXXXXXX
(1).参考:http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.continuewith.aspx
(2).http://msdn.microsoft.com/en-us/library/dd321446.aspx
2.如果是用BeginXXX,EndXXX,就用callback.
[解决办法]
[code=c#]
public delegate void delegateHandle();

public partial class FCPMClient : Form
{
public event delegateHandle onFinished;
private Thread thread = null;

public FCPMClient()
{
  InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
  thread = new Thread(new ThreadStart(fun1));
  thread.Start();
  label1.Text = "线程开始";
}

private void fun1(){
  Thread.Sleep(3000);
  onFinished  mi = new onFinished(fun2);
}

private void fun2(){
  label1.Text = "线程结束";
}
}
[/code]
[解决办法]
private Thread thread = null;这句没用,去掉
C# code
 public delegate void delegateHandle();public partial class FCPMClient : Form{   public event delegateHandle onFinished;   public FCPMClient()   {      InitializeComponent();   }   private void Form1_Load(object sender, EventArgs e)   {      thread = new Thread(new ThreadStart(fun1));      thread.Start();      label1.Text = "线程开始";   }   private void fun1(){      Thread.Sleep(3000);      onFinished  mi = new onFinished(fun2);   }   private void fun2(){      label1.Text = "线程结束";   }} 

热点排行