0

私が扱っているものの簡単な例を示すことから始めます

私はWindowsフォームを持っています-それを「formA」と呼びましょう.formAには、ボタンのプロパティでvisible = falseを設定するボタンがあります。MainLoop という別のクラスがあります

Public class MainLoop


 sub new()
 end sub

 public sub run()
       If someCondition then
           formA.ButtonName.Visible = True
       End if


 end sub
 end class

このアプリケーションで複数のスレッドを実行していますが、特定の条件が満たされるまで、1 つのスレッドがこの「パブリック サブ実行」をループして実行し続けます。アプリケーションをデバッグしてステップ実行することで、visiblity = true を設定する行が実行されていることを確認できます。しかし、ボタンがフォームに表示されません。単純なスペルミスなどではないことを確認しました-ここで基本的なロジックが欠けているようです.

私はやってみました

dim TempForm as new formA

次に、私が試したIFステートメントで

 TempForm.ButtonName.Visible = true

しかし、それはフォームの新しいインスタンスを作成しています。実際には、私が使用している現在のフォームをボタンに設定していません。

どんな助けでも大歓迎です。

4

2 に答える 2

2

UI スレッド以外のスレッドで可視性を設定している場合は、それを呼び出して可視化する必要があります。別のスレッドから UI スレッドに触れることはできません。

于 2012-11-29T20:58:41.507 に答える
0

答えを疑問に思っている人には、結局は、

Control.Invokeメソッド(Delegate、Object())

チュートリアルはここにあります

于 2012-12-10T12:08:05.607 に答える