我正在调查堆栈跟踪(在调试时看到),如下所示:
MyUtility.AcquireLock()
[some of our code]
MyControl.OnPaint(PaintEventArgs e)
[some external WinForms (painting) code]
(native code corresponding to Monitor.Enter(object))
MyUtility.AcquireLock()
[some of our code]
MyControl.OnLoad(EventArgs e)
这是否有意义或是否有些事情搞砸了我的堆栈跟踪?
我几乎(但不是完全)确定,没有其他线程持有此锁,我正在尝试获取(通过使用Monitor.Enter())。
答案 0 :(得分:1)
确实如此。 Monitor.Enter执行所谓的警报等待。只有少数人知道这在2011年意味着什么,因为它是一个模糊的概念。这意味着线程将在等待时抽取窗口消息。是的,这看起来很奇怪。你目前处于一个非常黑暗的痛苦世界,因为你面临着不确定性的重入问题。
光明的方式是不要等待gui线程!启动后台线程,可能是BackgroundWorker。