成员上的多个线程更改不会反映在主线程中

时间:2013-03-11 05:40:38

标签: c# .net multithreading c++-cli

我可以在这里得到社区的意见。我有一个应用程序,其中我有多个线程访问(this)类的成员,该类调用线程本身。问题是当新线程在LinkedList成员中添加一个元素时,我可以看到LinkedList的计数由于添加的元素而增加到1,但是在主线程中新线程所做的更改没有反映出来。我甚至将当前对象的引用传递给ParameterizedThreadStart,但它仍然无效。

插图:

ParameterizedThreadStart^ pReceiveProc = gcnew ParameterizedThreadStart(this, &ActualClass::Receive);
Thread^ pReceiveThread = gcnew Thread(pReceiveProc);
pReceiveThread->Start(this); // passed the current instance

线程方法:

void Receive(Object^ pObj) {
    ActualClass^ l_Cls = dynamic_cast<ActualClass^>(pObj);
    l_Cls->MyLinkList->AddLast("test");
    Console::WriteLine("{0}", l_Cls->MyLinkList->Count); //outputs 1
}

但如果我从主线程访问MyLinkList:

void MethodMainThread(){
    Console::WriteLine("{0}", MyLinkList->Count); //outputs 0
}

静态成员解决方案不是一种选择。

2 个答案:

答案 0 :(得分:1)

最可能的是,你的辅助线程被抢占,你的主线程检查计数,然后辅助线程添加一个对象,尝试使用信令,让主线程等待,直到辅助线程完成其操作。

答案 1 :(得分:0)

您不能像这样在线程之间共享数据。一个简单的方法是使用'lock'语句。这很简单,here's是一个很好的解释。