一旦线程结束,通知主线程
本文关键字:线程 通知 结束 | 更新日期: 2023-09-27 18:14:48
我的winform有一个线程正在运行,我需要它通知主线程一旦它完成,那么主线程可以设置进度条回到正常状态。
目前,我有如下内容
------begin---------
// codes before....
call thread one....
create thread two instance then start thread two
---------end------------------
在线程2中,我有
--------begin------
while(threadOne.isalive){
Thread.Sleep(500);
}
call setProgressbar delegate
---------end----------------
我这样做,而不是把一个var在线程1是因为线程1是递归方法....我想知道这样做是否正确,有人能帮忙吗?由于
编辑:下面的答案回答了你明确的问题,但是如果你正在使用。net 4,你应该考虑在更高的抽象层次上思考——任务。任务并行库提供了比"裸"线程更丰富的功能集,你可以做一些事情,比如注册延续(使用 原始回答 最简单的方法是委托第一个线程的职责,例如 如果你的线程可能做不同的事情,你可以改变你的 : 请注意,如果您确实想要多线程解决方案,只需使用Task.ContinueWith
),你甚至可以指定使用哪个任务调度程序,所以你可以直接指定当后台任务完成时,一个特定的动作应该在UI线程上调用。public void WrappedStart()
{
bool success = false;
try
{
StartWork();
success = true;
}
finally
{
NotifyCompleted(success);
}
}
private void StartWork()
{
// Do your real work here
}
...
Thread t = new Thread(WrappedStart);
t.Start();
WrapperStart
采取行动来包装:public void WrappedStart(Action action)
{
...
}
Thread t = new Thread(() => WrappedStart(RealWork));
t.Start();
Thread.Join
而不是显式循环。