4

VB.NETを使ってこのインターフェースで簡単なタイマーを作りたい

ここに画像の説明を入力

Button1 を押して、テキスト ボックスで秒数のカウントを開始します。

タイマー コンポーネントは高解像度を提供しないため、使用したくありません。

そこで、仕様上解像度が高いストップウォッチクラスを使うことにしました。

しかし、以下の VB.NET コードによると、「ドットネット アドベンチャー」全体は不可能に思えます。これは、Button1 を押すとフォーム全体がフリーズし、Button2 を押してタイマーを停止できないためです。

私のコードに何か問題がありますか? 上記の機能を利用するにはどうすればよいですか?

前もって感謝します!

 
パブリック クラス Form1

Private enableTime As TimeSpan Private stopWatch As New Stopwatch() Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click stopWatch.Start() If stopWatch.IsHighResolution Then Do If stopWatch.ElapsedTicks.Equals(TimeSpan.TicksPerSecond) Then enableTime = enableTime + TimeSpan.FromSeconds(1) TextBox1.Text = enableTime.ToString stopWatch.Restart() End If If Not stopWatch.IsRunning Then Exit Do End If Loop End If End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click stopWatch.Stop() stopWatch.Reset() End Sub

クラス終了

4

3 に答える 3

5

WinForms には、メッセージ ループを実行する UI スレッドが 1 つあります。基本的に、すべてのイベントがメッセージ キューに追加され、イベントが次々と処理されます。Button1をクリックすると、メソッドButton1_Clickが実行され、終了するまで他のイベントは処理されません。Button2.Clickでループを終了するには設計を処理する必要があるため、終了するButton1.Clickことはありません。

必要なものを正しく実装するには、ストップウォッチをオンにして、フォームに配置するタイマーButton1.Clickのイベントに UI 更新ロジックを配置する必要があります。Tick

于 2013-05-11T11:03:59.520 に答える