[control].ValueChanged事件在表单创建期间调用vb.net

[control].ValueChanged事件在表单创建期间调用vb.net,vb.net,winforms,events,tcp,Vb.net,Winforms,Events,Tcp,我遇到了一个非常令人沮丧的问题,我真的希望有人能帮助我。我制作了一个通过TCP/IP命令控制另一个应用程序的应用程序。(我对应用程序的功能没有任何问题。)我的程序需要做的一件事是,在我的应用程序上更改其他应用程序中不同字段的值后,立即更新它们。为此,我使用 Sub ControlName_ValueChanged(sender As Object, e As System.EventArgs) Handles _ ControlName.ValueChanged sendData(d

我遇到了一个非常令人沮丧的问题,我真的希望有人能帮助我。我制作了一个通过TCP/IP命令控制另一个应用程序的应用程序。(我对应用程序的功能没有任何问题。)我的程序需要做的一件事是,在我的应用程序上更改其他应用程序中不同字段的值后,立即更新它们。为此,我使用

Sub ControlName_ValueChanged(sender As Object, e As System.EventArgs) Handles _
    ControlName.ValueChanged 

sendData(dataToSend,destination)

End Sub

格式。该子例程涉及TCP/IP事务,只有在用户在我的应用程序上手动启动后才会启动。我遇到的问题是,当我的启动窗体加载时,它会立即调用所有
*.ValueChanged
子例程,从而有效地锁定了我的应用程序。有人能解释为什么会发生这种情况以及如何停止吗?

如果要停止UI阻塞,可以让
sendData
实现使用异步调用(通常在类型上实现为
BeginSend
/
EndSend
方法对)

我不确定事件处理程序为什么会立即执行此操作(可能是因为在创建对象之后,在注册事件处理程序之后,该值被设置为某个默认值)

停止此操作的一种方法是在加载表单后手动连接
ValueChanged
事件处理程序,而不是通过designer.cs文件在设计器中执行此操作

或者,设置一个
suppressEvents
bool标志,您可以打开和关闭该标志,并修改方法以侦听该标志:

我不知道这是不是有效的VB,我用C#,但你明白了


我应该在什么地方定义
suppressEvents
标志?在类的开头还是在应用程序事件文件本身中?@Matt该标志将在包含表单中定义,并默认为
true
,然后在加载表单时将其设置为
false
。事件仍会触发,但处理程序被编码为侦听flag。我认为事件触发的原因是,当控件被实例化时,它没有值,但我猜您正在设置一些默认值(我以前遇到过)。Adam的suppressEvents应该可以工作,就像说“如果值不是空的,那么sendData”一样。
Sub ControlName_ValueChanged(sender As Object, e As System.EventArgs) Handles _
    ControlName.ValueChanged 

If suppressEvents Is True Then Return

sendData(dataToSend,destination)

End Sub