2017-10-11 7 views
1

私はビジュアルベーシックに少し錆びますが、私が取り組んでいるプロジェクトには.NET言語が必要です。Visual Basic GUIの.textプロパティをバックグラウンドスレッドで更新しています

私は私の上のループのためにこれを通過するとき、それはテキストを更新しないことを、Windowsの4メートルのアプリケーション

'weve read the stuff...now lets update the textbox with the ADC value 
    DataQSingleDevice.GetInterleavedBinaryData(BinaryData, 0, 18) 



    DataQSingleDevice.Stop() 
    DATAQHandler(0).Disconnect() 




    'now lets throw data in the textbox 
    Button1.Text = "Connected!" 

    For incramenter As Integer = 0 To 10 
     TextBox1.Text = BinaryData(incramenter) 
     Threading.Thread.Sleep(2000) 
    Next 
    end sub 

でテキストボックスのテキスト値を更新するコードのビットを書くとき、私は気づいた

すべての反復で値。私はそれがこのサブがあるメソッドが終了した後にしかそれを行うことができることを意味します。

私は、このようなプロパティの変更は、通常、GOD自身とJava言語の発明者しか見つけられないような、決して終わりがないループ内に埋め込まれたメインのUIスレッドに実装されていることを覚えています。また、AsyncTask <>やJava.util.concurrentのようなメソッドを使用して、バックグラウンドスレッドで何かを行い、特定のビューを更新できることを覚えています。

My question:

のようなGUI上でのVisualBasicで物事のプロパティを更新する方法はありますAndroidのプログラミングでは、いくつかのビューを定期的にバックグラウンドスレッドで更新することができますどのように「TextBox1.Text」似て? (このプロセスは数分の更新に及ぶ可能性がありますが、この例は20秒しか持続しませんが、実際の使用は10分間続く可能性があります)

+2

これがバックグラウンドスレッドで実行されている場合は、BeginInvokeを呼び出してUIスレッドで強制的に更新を実行する必要があります。 – dwilliss

答えて

0

実際には、別のスレッドからUIにアクセスする適切な方法があります。あなたはこれを行う必要があります。

TextBox1.Invoke(Sub() TextBox1.Text = BinaryData(incramenter)) 

またはこれに代えて

TextBox1.BeginInvoke(Sub() TextBox1.Text = BinaryData(incramenter)) 

TextBox1.TextBox1.Text = BinaryData(incramenter) 

.Invoke.BeginInvokeとの違いは、最初は、つまり、同期電流を実行することですスレッドは、UIスレッドで完全に実行されるようにラムダサブ内のアクションを待機し、その後にのみ実行されます。後者はラムダサブを実行するのを待たずにUIスレッドで実行されるように送信するので、呼び出し元スレッドは直ちに処理を進めます。あなたに合ったものを選ぶのはあなた次第です。

+0

私はバックグラウンドのスレッドを作って、これを試すのに邪魔になるでしょう! –

関連する問題