【问题标题】:Find the foreground thread from the background thread从后台线程中找到前台线程
【发布时间】:2009-03-27 19:21:12
【问题描述】:

当你在后台线程的上下文中时。

Thread.IsBackground == true

有没有办法找到调用这个后台线程的前台线程?

感谢您的帮助

更新:创建的线程是后台线程并由线程池处理(在 Workflow Foundation 运行时内部)。我无法在每个后台线程中添加来自主线程的引用。有没有办法从线程池中找到那个前台线程?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    没有这样的关系。 任何 线程都可以创建一个新线程,包括另一个后台线程。创建新线程后,创建线程与新线程之间没有任何关系。如果您需要知道哪个线程创建了新线程,则需要在 ThreadStart 中传递该信息。

    编辑:对于线程池线程,当您的任何代码运行时,我假设它已被您指定为某处的任务,以某种方式。如果您需要一些可用信息(无论是线程 ID 还是其他任何信息),您需要将其放入该任务的上下文中。

    【讨论】:

    • 我不确定你想知道什么。如果您确实需要,您可以将创建当前任务的线程作为状态传递。为什么首先需要这些信息?
    • 我正在处理 nhibernate 会话,并且会话必须由线程提供。所以我尝试为工作流线程和他的所有活动设置一个会话。因为事务在工作流创建之前开始并在工作流结束时提交。 (但这意味着相同的会话)
    • 那么您如何指定要调用的委托?基本上,该代表需要拥有您在任务中需要的所有信息。将会话作为上下文的一部分提供给它。
    • 我不使用委托,因为服务和数据层来自 Web 应用程序。我使用存储会话的 ISessionStorage 的实现。对于它通过 httcontext sessionid 存储的网络应用程序,我实现了通过线程 id 获取 NH 会话(这就是问题所在)
    • 如果您的代码在线程池上运行,那么您正在使用委托。这就是线程池的工作方式——你给它一个委托,它在线程池线程上执行委托。您如何指定工作?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多