![](/img/trans.png)
[英]ObservableCollection doesn't reflect changes for Summary calculation
[英]multiple threads changes on a member doesn't reflect in the main thread
我可以在这里征询一下社区的意见。 我有一个应用程序,其中有多个线程访问(此)类的成员,该类调用了线程本身。 问题是,当新线程在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
}
静态成员解决方案不是一种选择。
最有可能的是,您的辅助线程被抢占,您的主线程检查计数,然后辅助线程添加了一个对象,尝试使用信号传输,然后让主线程等待,直到辅助线程完成其操作。
不能像这样那样在线程之间共享数据。 一种简单的方法是使用“ lock”语句。 这很简单, 这是一个很好的解释。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.