スマートデバイス(WindowsCE)上で実行される既存のVBコードがあります。私は、プリプロセッサ命令に基づいてCEの代わりにウィンドウ用にコンパイルする "シミュレーションモード"を持つようにコードを編集しました。シミュレートされたデバイスを実行しているユーザーがログファイルを読み取らずに何が起きているのかを理解できるようにするために、UIを追加しようとしています。現在、UIの更新に使用されているコードは実行されていますが、変更は表示されません。 SimulatorGUIクラスでGUIを更新するコードが実行されますが、GUIは更新されません
Public Module SomeDevice
#If __SIMULATE__ Then
Private WithEvents _derp As New SimulatorGUI()
Private _guiShown As Boolean = False
Private _guiLoading As Boolean = False
Private Sub handleShown(sender As Object, e As EventArgs) Handles _derp.Shown
_guiShown = True
End Sub
Private Sub handleLoading(sender As Object, e As EventArgs) Handles _derp.Load
_guiLoading = True
End Sub
#End If
Public Sub Main()
#If __SIMULATE__ Then
Dim GUIThread As Threading.Thread = New Threading.Thread(Sub() _derp.ShowDialog())
'I have also tried System.Windows.Forms.Application.Run(_derp))
GUIThread.Name = "Simulator GUI"
GUIThread.Start()
While Not _guiLoaded OrElse Not _guiShown
Thread.Sleep(0)
End While
SimulatorGUI.PutOnGUI("Loaded and shown")
#End If
'normal device functionality
End Sub
End Module
を::
Public Class SimulatorGUI
Public Sub PutOnGUI(ByVal message As String)
If Me.InvokeRequired Then
Me.Invoke(Sub() PutOnGUI(message))
Else
ListBox1.Items.Add(message)
Debug.WriteLine("DOING STUFF: " + message)
'ListBox1.Invalidate()
ListBox1.Update()
End If
End Sub
End Class
私はこのコードを実行する場合は、デバッグプリントが現れ、リストボックス内部コレクションがあることを示す。ここ
は、私がこれまで試みられてきたものですそれには期待されるテキストが含まれていますが、テキストはGUIに表示されません。また、 "InvokeRequired"チェックの結果、Me.Invokeが呼び出されることはありません。それが重要であれば、残りのデバイスコードは完全に期待どおりに実行されます。ここで何がうまくいかないのですか?
FYI 'Application.Run()は'それはまた、UIメッセージループを作成するので、最初の形式を示すの正しい方法です。 –