5
釋放鎖時,我收到SynchronizationLockException。SynchronizationLockException(對象同步方法從非同步代碼塊調用。)釋放鎖時
當然,我做的第一件事就是谷歌搜索這個問題。我發現了兩種主要的錯誤模式:
- 在與創建不同的線程上釋放互斥鎖。
- 將值類型用作Monitor的同步對象。或 修改監視器的加入和退出之間的同步對象。
問題是,這些模式都不符合我的情況。
我有一個非常簡單的同步場景:
public class MyClass : IDisposable
{
private readonly object _myLock = new object();
internal void Func1()
{
lock (_myLock)
{
//Some code here
}
}
internal void Func2()
{
lock (_myLock)
{
//Some code here
}
}
public void Dispose()
{
lock (_myLock)
{
//Some code here
} // Here is where I get an exception
}
}
最後,我收到SynchronizationLockException
在哪裏鎖被釋放的Dispose()
線。
我的問題不是「我的代碼有什麼問題」或「我做錯了什麼」。基本上,我想知道如何(以及在什麼情況下)可能發生這種情況,.NET的鎖實現引發此異常。
謝謝。
什麼是堆棧跟蹤? – SLaks
由於非託管代碼造成的堆損壞總是可能的。在你的問題中沒有任何東西可以表明這很可能。 –
對象同步方法是從一個非同步的代碼塊調用的。 在MyClass.Dispose() 在CleanupForm.OnBtnRemoveClick(對象發件人,EventArgs的) 在System.Windows.Forms.Control.OnClick(EventArgs的) 在System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) ...消息&m) 在System.Windows.Forms.ButtonBase.WndProc(消息&m) 在System.Windows.Forms.Button.WndProc at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam) – user1921819