【发布时间】:2014-04-11 11:49:56
【问题描述】:
我在 VB.NET 中创建了一个用户控件,并且我在 MouseMove 事件中做了一些相当耗时的工作。
我预计 MouseMove 事件会排队。
但我包含了一个陷阱,它表明 MouseMove 事件确实没有排队,我认为它是异步工作的。
Private _bInproc As Boolean = false
Private Sub ucGrid_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
If _bInproc Then
Stop 'This should never be reached if MouseMove events were always queued, I think
End If
_bInproc = True
doMousePointerMoveStuff(e.X, e.Y)
_bInproc = False
End Sub
有没有人看到我可能犯的任何错误,或者有没有人知道我的情况可能会变成异步的情况??
【问题讨论】:
-
你有明确调用
ucGrid_MouseMove方法的代码吗?您是否有任何代码明确引发UserControl的MouseMove事件?我怀疑doMousePointerMoveStuff中的某个地方正在做这些事情之一。 -
我在 doMousePointerMoveStuff 中调用 Me.Invalidate(somechangedregion)。但这不应该造成这种影响,不是吗?
-
@StevenDoggart 你是对的......我正在做一些介于两者之间的事情:我正在使用一个 Application.DoEvents 它破坏了它。你能把你的评论作为回复吗?您能否还补充一点,在“停止”之后按 f11 有助于找出导致不平衡的原因?因为这样我就进入了具有 DoEvents 的函数。
标签: vb.net user-controls mousemove