イベントからフォームをロードするときにフォームのフリーズに問題が発生しました。私はそれがスレッディングと関係があると思っていますが、悲しいことに私はそれを自分自身で解決するには十分に分かりません:(vb.netフォームフリーズ、スレッド、イベント、混乱したnoob
私のプロジェクトを説明しましょう: 私はネットワークのイベントにフックするクラスを持っています例えば)、私はフォームでインスタンス化してきた が、そこからいくつかのイベントを宣言した。
Public Netstat As New aaNetTool.clsNetworkStatus
AddHandler Netstat.NetworkChanged, AddressOf Network_Changed
Sub Network_Changed()
End Sub
を私は通知にフォームを表示するために使用する別のクラス、clsMessageを書いた後。
Public Class clsMessage
Private myForm As frmDisplayMessage
Public Sub New(ByVal Title$, ByVal Text$, Optional btnYesAction As Action = Nothing, Optional ByVal ShowTimeSec% = 10)
myForm = New frmDisplayMessage
myForm.Text = Title
myForm.lblText.Text = Text
(...)
myForm.Show()
(...)
End Sub
今、私はこのようなメインフォームからボタンを押して、デバッグのためのEW通知ウィンドウ:
Dim myMsg As New clsMessage("title", "text", AddressOf MapNetworkdrives, 30)
これは魔法のように動作します。私は私の宣言イベントから通知を呼び出すとき
は、しかし:通知と
Sub Network_Changed()
Dim myMsg As New clsMessage("title", "text", AddressOf MapNetworkdrives, 30)
End Sub
フォームが表示されますが、空とフリーズです。 としてはLunex
は、私はこれは私のコードは、別のスレッドで実行されているとしなければならないかもしれませんが、私はこれを解決する方法:(あなたの時間を事前に
感謝を把握することはできませんだと思う前に言いました
:
次に、あなたがこのようにそれを使うだろう。あなたの 'Network_Changed'メソッドで(Me.InvokeRequired.ToString())'を表示しますか? –
ITはInvokeRequired = trueを示しています。 – Lunex
これは、 'Network_Changed'メソッドが別のスレッドで実行され、UIスレッドにアクセスするために呼び出さなければならないことを意味します。 –