![](/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.