评论会员:克莱夫・波特 时间:2012/02/06
我modfied了代码
Delegate Sub ShowHideForm_Delegate(ByVal pform As Form, _
ByVal pshow As Boolean)
Private Sub ShowHideForm_ThreadSafe(ByVal pform As Form, _
ByVal pshow As Boolean)
If pform.InvokeRequired Then
Dim MyDelegate As New ShowHideForm_Delegate(AddressOf ShowHideForm_ThreadSafe)
pform.Invoke(MyDelegate, New Object() {[pform], [pshow]})
Else
If (pshow) Then
pform.Show()
Else
pform.Hide()
End If
End If
End Sub
这工作得很好,虽然有一个鼠标点击事件对目标的问题
形式(pform)
再次感谢)
评论会员:游客 时间:2012/02/06
SwingSwis:问题是不明确的和无关的信息,而一些相关的信息可能丢失。基本上,所有的呼叫到任何UI方法/属性应只从UI线程。所以,如果你想引起显示或隐藏的形式,从任何线程安全,你应该做的:{C}而不是调用等待在UI线程事件循环的委托加工,可以使用的非bloking的BeginInvoke将立即返回,当委托实例,并调用其参数被张贴到UI线程队列,看到我的引用是不是真的需要检查InvokeRequired:此代码将工作,如果只调用方法(在此条件下的第一个分支)。从UI线程调用时,调用非分支(直接调用)将只是更有效。还有另一种情况时,只需要调用的一部分:当你是肯定的,那上面的代码将只能从非UI线程调用。再次,它会从任何线程中工作,但是这将是事倍功半,如果从(下同)UI线程。称为你不能调用任何有关从非UI线程到UI。相反,你需要使用该方法的Invoke或BeginInvokeSystem.Windows.Threading.Dispatcher(窗体或WPF)或System.Windows.Forms.Control的(形式)。在我过去的答案,你会发现它是如何工作的详细解释和代码样本:imgsrc=,{A1}见多线程也引用:{A2}{A3}]mdash;水杨酸
SAKryukov
评论会员:{的C2} 时间:2012/02/06