【问题标题】:How to end a thread or join it to the main thread如何结束线程或将其加入主线程
【发布时间】:2011-06-09 14:43:23
【问题描述】:

简化,我启动了一些后台线程(这是原始方法),当它们完成工作时,它们会引发一个事件,在这种情况下它们会调用原始方法。

当事件被引发时,它在引发它的线程下运行。在从该事件中调用原始方法之前,我想重新加入主线程(或重新加入原始方法中)。从而避免可以创建更多线程的线程。

我想我担心原始线程永远不会被垃圾收集,因为它们调用了更多线程?会是这样吗?以及如何确保线程已完成?

请注意,我确保任何时候都只能运行 x 个线程。

【问题讨论】:

  • 阅读更多内容后,我认为这不会成为问题,因为它都是自动处理的。但是我决定暂时不删除这个问题,以防有人对此有什么有趣的说法。

标签: .net multithreading .net-3.5 thread-safety


【解决方案1】:

线程将是独立的。要在它们之间推送工作,您需要一个基本的同步队列,或者类似 Control.Invoke 方法。

要等到另一个线程退出,你可以使用:

otherThreas.Join();

但在许多方面,事件方法更简洁。但是,ever 将在另一个线程上,因此您可能需要(例如)切换回上面提到的 UI 线程。

【讨论】:

  • 当你说 UI 线程时,你是指主线程吗 - 这是一个类库,最终可能会耗尽 Windows 服务。
  • @MrShoubs - 好吧,实际上并没有“主”线程 - 入口点线程没有什么特别之处,只是它首先被创建。在这种情况下,我建议您可能希望主线程为工作队列提供服务,但......
  • 这是一个很好的评论有两个原因 - 我认为它是一个主线程的观点有点错误,而这正是我正在做的 - 主线程持有并维护一个队列(同步当然锁定)。我没有 .net 4,所以我不能使用它的新并发队列 :((我所有的线程都是后台的,正如我告诉他们的那样。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-06
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多