C# 主线程在c中等待线程#
我想让主线程生成线程,并且能够在不等待所有线程完成的情况下继续生成更多线程。线程的生成由用户控制,因此用户可以在不同的时间段添加更多线程C# 主线程在c中等待线程#,c#,multithreading,C#,Multithreading,我想让主线程生成线程,并且能够在不等待所有线程完成的情况下继续生成更多线程。线程的生成由用户控制,因此用户可以在不同的时间段添加更多线程 问题是。。。当主线程正在运行finalize时,如何执行此操作。在finalize中,使其等待所有活动线程完成。跟踪所有创建的线程;例如,通过列表集合。使用finalize方法时,只需迭代所有线程并按顺序调用它们的Join方法,如下面的WaitForThreads方法所示: private readonly List<Thread> threads
问题是。。。当主线程正在运行finalize时,如何执行此操作。在finalize中,使其等待所有活动线程完成。跟踪所有创建的线程;例如,通过
列表
集合。使用finalize
方法时,只需迭代所有线程并按顺序调用它们的Join
方法,如下面的WaitForThreads
方法所示:
private readonly List<Thread> threads = new List<Thread>();
public void SpawnThread(Action action)
{
Thread thread = new Thread(new ThreadStart(action));
thread.IsBackground = false;
threads.Add(thread);
thread.Start();
}
private void WaitForThreads()
{
foreach (Thread thread in threads)
thread.Join();
}
private readonly List threads=new List();
公共空产卵线程(操作)
{
线程线程=新线程(新线程开始(操作));
thread.IsBackground=false;
线程。添加(线程);
thread.Start();
}
私有void WaitForThreads()
{
foreach(线程中的线程)
thread.Join();
}
阻止调用线程(应该是主线程),直到特定线程终止。如果线程已经终止,那么调用将立即返回(这就是为什么在终止时不需要从收集中删除线程,尽管为了垃圾收集,仍然需要这样做)
此外,您还应该考虑为什么需要等待线程在<代码>终结FialIt>/Cult>方法中终止。如果只是为了防止它们在主线程终止时被强制中止,那么就没有必要了;在属性为
false
的所有线程完成执行之前,进程将保持活动状态(即使没有窗口)。垃圾收集也是如此;除非不再从任何活动线程(而不仅仅是主线程)引用堆对象,否则堆对象将无法最终确定。这是关于正确使用.join()方法的问题吗?您的问题中缺少一点:您说过用户可以在不同的时间段添加线程。我的问题是:在等待用户时,主线程将做什么?主线程如何知道用户没有更多的线程要添加?我真的不需要线程。Join,因为我不需要从线程返回任何内容。我所需要的就是让主线程准备好接收越来越多的线程,而生成的线程完成工作。这是如此有趣的代码,我有工作很好。我缺少的是IsBackground=false;线路。这是真的,所以当主线程终止时,派生线程也随之终止。在这种上下文中使用术语“背景”是误导性的。开发人员通常在开始时假设除主线程外,所有线程都是后台线程。很高兴能帮忙!