示例代码:
MyObject myObject = new MyObject ();
public void FunA () // accessed from thread 1 (when user click a button)
{
myObject = null;
// do some stuff
myObject = new MyObject ( someNewValues );
}
public void FunB () // accessed from thread 2 (calling using timer or smth.)
{
int x = myObject.ReadX ();
}
在大多数情况下,它可以正常工作,但是当 FunA 将 myObject 设为 null 并且 FunB 将同时访问它时,应用程序将崩溃。
问题:如何做到这一点,当线程1访问FunA时,线程2无法进入FunB?
更新:我之前尝试过锁,但问题是 FunB 正在调用线程 1 (GUI) (guiForm.Invoke) 的事件,线程 1 将在 FunA { lock...} 之前卡住。