我有兩個工作線程。我用同一個鎖鎖定了兩個線程,但threadB在threadA之前得到執行,因此異常來了。我同時使用同一個鎖對象鎖定了線程。線程B正在使用委託函數。我該如何解決這個問題。C#線程鎖定失敗
詳細信息:
我有一個叫StateSimulation
類。 裏面有兩個函數調用 一個)OnSimulationCollisionReset
B)OnSimulationProgressEvent
執行是這樣的:
private void OnSimulationCollisionReset()
{
Thread XmlReset = new Thread(XmlResetFn);
XmlReset.Start();
}
private void OnSimulationProgressEvent()
{
DataStoreSingleTon.Instance.IsResetCompleted = true;
Thread ThrdSimulnProgress = new Thread(SimulnProgress);
ThrdSimulnProgress.Start();
}
其中SimulnProgress()
和XmlResetFn()
如下:
private void SimulnProgress()
{
//uses a delegate
UIControlHandler.Instance.ShowSimulationProgress();
}
private void XmlResetFn()
{
DataStoreSingleTon.Instance.GetFPBConfigurationInstance().ResetXmlAfterCollision();
}
在哪個OnSimulationProgressEvent()
正在使用委託功能。
showSimulationProgress
和ResetXML...()
使用相同的資源FPBArrayList
。
我的要求是SimulationProgressEvent()
只能在Reset..()
後才能使用。在resetXML..()
我清除了FPBList
。 在SimulationProgress()
我訪問FPBList[i]
其中i:0--->size;
我已鎖定兩個函數使用相同的鎖對象。我預計,reset()
將首先完成。但進入復位後,在完成復位之前,showProgress()
開始發生異常。
如何解決我的問題?
這是我如何鎖定功能
public System.Object lockThis = new System.Object();
private void SimulnProgress()
{
lock (lockThis)
{
UIControlHandler.Instance.ShowSimulationProgress();
}
}
private void XmlResetFn()
{
lock (lockThis)
{
DataStoreSingleTon.Instance.GetFPBConfigurationInstance().ResetXmlAfterCollision();
}
}
請給出一個解決方案。 Registers Nidhin KR
請更好地格式化您的代碼,很難遵循它。您可能需要重新設計應用程序。 – jgauffin 2010-08-31 12:59:51
什麼例外的是它被拋出? – 2010-08-31 13:02:42