【问题标题】:If I pass an object to a thread via ParameterizedThreadStart, can I access it later?如果我通过 ParameterizedThreadStart 将对象传递给线程,以后可以访问它吗?
【发布时间】:2009-09-10 00:20:18
【问题描述】:

如果我以以下方式启动线程

Thread newThread = new Thread(new ParameterizedThreadStart(MyThreadMethod));
Object myObject = new Object();
newThread.Start(myObject);

完成任务后,我能知道它对 myObject 做了什么吗?

// at some point later
if(newThread.ThreadState == ThreadState.Stopped)
{
//access my object? how?
}

【问题讨论】:

    标签: c# multithreading parameterized


    【解决方案1】:

    你把东西递给了它。因此,只需将您手上的对象存储在您启动的线程旁边。不过要非常小心使用它,否则您可能会遇到有趣的线程问题。

    【讨论】:

    • 所以如果我有一个对象列表,并且每个对象都在一个单独的线程中处理,我应该在每个对象中保留一些标志或 Id,然后使用标志/Id 在其中找到我的对象处理时的列表?
    • 但是当然......这个解决方案不知怎的逃过了我......谢谢=)
    【解决方案2】:

    当然。线程的停止绝不会破坏传递给它的对象。只要仍然有对该对象的引用,并且它没有被释放,它仍然可以使用。

    但是,没有固有的方法可以取回传递给 Thread::Start 方法的值。相反,您必须保留对它的引用,可能是从您开始线程的地方。

    【讨论】:

      猜你喜欢
      • 2017-10-09
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多