0

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

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

sendData(dataToSend,destination)

End Sub

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

4

1 回答 1

1

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

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

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

或者,有一个suppressEventsbool 标志,您可以打开和关闭它,并修改您的方法以收听标志:

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

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

If suppressEvents Is True Then Return

sendData(dataToSend,destination)

End Sub
于 2012-07-02T12:12:18.177 回答