2012-03-08 18 views
0

Windowsフォーム、VBアプリケーション...この非常に基本的な質問に対して私を前もって許していますが、私はここで本当に単純なものを見落としています。各ループの実行時に変数の現在の値を示すラベルを表示させたいのですが、非常に単純なボタンClickイベントを作成して、どこが失敗したのかを把握しました。現在のところ、各ループの実行が終了するまで値は表示されません。実行するたびに実際にカウンタ値が表示されるはずです...私の人生のために、それを反映するために常にラベルを更新する必要があるので、なぜ私はバーを見逃しているのか理解していないのですか?次のように テストサブは次のとおりです。テキストボックスのテキスト実行中のループ毎に更新中

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim counter As Integer = 0 
    For x As Integer = 1 To 200000 
     counter += 1 
     Label1.Text = Convert.ToString(counter) 
    Next 
End Sub 
+0

Label1.Update()を追加します。これは、WindowsがWindowsを停止するまで約5秒間動作します。 –

答えて

5

行追加してみてください:ループ内Application.DoEvents()を。

+0

これは間違いなくこの質問に答えますが、DoEventsを使用している場合は、期待していない方法でユーザーがUIとやりとりする可能性があることも考慮する必要があります。たとえば、ループ実行中にフォームを閉じることができます。ボタンをクリックすることができます(ボタンがループをトリガーする場合は特に興味深い)。それは目的を持っていますが、UIスレッドで長い操作を実行しない方が良いでしょう。 – codechurn

+0

DoEventsはループの実際の実行を遅くすることに注意してください。これらのようなものは通常、GUIスレッドを解放しながら他のスレッドで実行されます。 BackgroundWorkerもチェックしてください。 –

1

では、レポートのプログレを持つようにしたい場合、私はあなたに助言する

For x As Integer = 1 To 200000 
    counter += 1 
    Label1.Text = Convert.ToString(counter) 
    System.Threading.Sleep(200) 
Next 

これはBackGroundWorkerを使用するようにしてください。

SEE HERE
SEE ALSO HERE
BEST LINK for methis

関連する問題