我遇到了一个非常令人沮丧的问题,我真的希望有人可以帮助我。我已经创建了一个通过TCP / IP命令控制另一个应用程序的应用程序。 (我对应用程序的功能没有任何问题。)我的程序需要做的一件事就是在我的程序发生变化后立即更新另一个应用程序中不同字段的值。为此,我使用
Sub ControlName_ValueChanged(sender As Object, e As System.EventArgs) Handles _
ControlName.ValueChanged
sendData(dataToSend,destination)
End Sub
格式。子例程涉及TCP / IP事务,直到用户在我的应用程序上手动启动它才会启动。我遇到的问题是,当我的启动表单加载时,它会立即调用所有*.ValueChanged
子例程,从而有效地锁定我的应用程序。有人可以解释为什么会发生这种情况以及如何阻止它吗?
答案 0 :(得分:1)
如果要阻止UI阻止,可以使sendData
实现使用异步调用(通常在类型上实现为BeginSend
/ EndSend
方法对。
我不确定为什么事件处理程序正在进行此操作(可能是因为在创建对象之后,在注册事件处理程序之后将值设置为某个默认值。)
阻止它的一种方法是在加载表单后手动连接 或者,有一个 我不知道这是否是有效的VB,我做C#,但你明白了。 ValueChanged
事件处理程序,而不是通过designer.cs文件在设计器中执行。< / p>
suppressEvents
bool标志可以打开和关闭,并修改你的方法来听标志:Sub ControlName_ValueChanged(sender As Object, e As System.EventArgs) Handles _
ControlName.ValueChanged
If suppressEvents Is True Then Return
sendData(dataToSend,destination)
End Sub