0

私は非常に苛立たしい問題に遭遇していて、誰かが私を助けてくれることを本当に望んでいます。TCP/IPコマンドで別のアプリケーションを制御するアプリケーションを作成しました。(アプリケーションの機能に問題はありません。)私のプログラムが行う必要があることの1つは、他のアプリケーションのさまざまなフィールドの値が自分で変更されたらすぐに更新することです。これを行うために、私は

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メソッドペアとして実現されます。

イベントハンドラーがこれをオフハンドで実行している理由がわかりません(おそらく、オブジェクトが作成された後、イベントハンドラーが登録された後、値がデフォルトに設定されているためです)。

これを停止する1つの方法は、designer.csファイルを介してデザイナで行うのではなく、フォームをロードした後ValueChangedにイベントハンドラを手動で接続することです。

または、suppressEventsオンとオフを切り替えることができるブールフラグを用意し、フラグをリッスンするようにメソッドを修正します。

これが有効な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 に答える