I have two working threads.I have locked both with a same lock, but threadB is getting executed before threadA, so exception came.I locked both using the same lock object.Thread B is using delegate function.How can I solve the issue.
Detailed Information:
I have a class called StateSimulation. Inside that there are two functions called a) OnSimulationCollisionReset b) OnSimulationProgressEvent
Implementation is like this:
private void OnSimulationCollisionReset() { Thread XmlReset = new Thread(XmlResetFn); XmlReset.Start(); } private void OnSimulationProgressEvent() { DataStoreSingleTon.Instance.IsResetCompleted = true; Thread ThrdSimulnProgress = new Thread(SimulnProgress); ThrdSimulnProgress.Start(); } where SimulnProgress() and XmlResetFn() are as follows:
private void SimulnProgress() { //uses a delegate UIControlHandler.Instance.ShowSimulationProgress(); } private void XmlResetFn() { DataStoreSingleTon.Instance.GetFPBConfigurationInstance().ResetXmlAfterCollision(); } In which OnSimulationProgressEvent() is using a delegate function.
Both showSimulationProgress and ResetXML...() uses a same resource FPBArrayList.
My requirement is SimulationProgressEvent() should work only after Reset..(). In resetXML..() I clear the FPBList. In SimulationProgress() I access FPBList[i] where i:0--->size; I have locked both functions using a same lock object.I expected, reset() will complete first. But after entering to reset, before complete reset, showProgress() started and exception occured..
How to solve my issue?
This is how I locked the functions
public System.Object lockThis = new System.Object(); private void SimulnProgress() { lock (lockThis) { UIControlHandler.Instance.ShowSimulationProgress(); } } private void XmlResetFn() { lock (lockThis) { DataStoreSingleTon.Instance.GetFPBConfigurationInstance().ResetXmlAfterCollision(); } } Please give a solution. Regards Nidhin KR