2012-07-02 19 views
0

我正在運行一個非常令人沮喪的問題,我真的希望有人能幫助我。我製作了一個應用程序,通過TCP/IP命令控制另一個應用程序。 (我對應用程序的功能沒有任何問題。)我的程序需要做的其中一件事就是在其他應用程序中的不同字段值更新後立即更新。爲此,我使用[control] .ValueChanged事件在表單創建時調用vb.net

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

sendData(dataToSend,destination) 

End Sub 

格式。該子例程涉及TCP/IP事務,直到用戶在我的應用程序上手動啓動它纔會啓動。我遇到的問題是,當我的啓動表單加載時,它立即調用所有*.ValueChanged子例程,有效地鎖定了我的應用程序。有人可以解釋爲什麼會發生這種情況,以及如何阻止它?

回答

1

如果你想停止UI阻塞,你可以使sendData實現使用異步調用(通常實現爲在類型BeginSend/EndSend方法對。

我不知道爲什麼事件處理程序是這樣做的副手(可能是因爲在創建對象後,該值設置爲一些默認的事件處理程序已註冊後)。

一種方法來阻止它是手動的電纜鋪設ValueChanged事件處理後您已經加載了您的表單,而不是在設計器vi中進行一個designer.cs文件。

另外,有一個可以打開和關閉,並修改你的方法來聽旗幟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 
+0

我在哪裏定義'suppressEvents'標誌?在課程開始時還是在應用程序事件文件本身中? – Matt

+0

@Matt該標誌將在包含的表單中定義,默認爲「true」,然後在表單加載時將其設置爲「false」。事件仍然發生,但處理程序被編碼聽標誌。 –

+1

我認爲事件觸發的原因是因爲當控件被實例化時,它沒有任何價值,但我猜你正在設置一些默認值(我之前遇到過)。 @亞當的suppressEvents應該工作,以及只是說像「如果值不是什麼,然後發送數據」。 – APrough

相關問題