我的winform有一个线程在运行,我需要它在完成后通知主线程,然后主线程可以将进度条设置回正常状态。
目前,我所拥有的是以下内容
------begin---------
// codes before....
call thread one....
create thread two instance then start thread two
---------end------------------
在第二个帖子中,我有
--------begin------
while(threadOne.isalive){
Thread.Sleep(500);
}
call setProgressbar delegate
---------end----------------
我这样做而不是在一个线程中放一个var是因为线程一是递归方法.... 我想知道这种做法是否正确,有人可以帮忙吗? 感谢
答案 0 :(得分:2)
编辑:该行下方的答案回答了您的明确问题,但如果您使用的是.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
而不是显式循环。
答案 1 :(得分:0)