Я хочу, чтобы создать простой таймер с этим интерфейсом, используя VB.NETСекундомер Loop с использованием VB.NET
Я хочу нажать Button1 и начать отсчет секунд в текстовом поле.
I do not want to use the Timer Component because it does not offer high resolution.
Итак, я решил использовать Секундомер класса благодаря высокому разрешению в соответствии со спецификациями.
Но, согласно моему коду VB.NET ниже, мне кажется, что все «приключение в dotnet» невозможно. Это потому, что, когда я нажимаю Button1, вся форма замораживается, и я не могу нажать Button2, чтобы остановить таймер.
Что-то не в порядке с моим кодом? Что делать, если у вас есть функции, описанные выше?
Заранее благодарен!
Public Class 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
Конец класса
Вы по-прежнему не хотите получать требуемое разрешение, даже если вы можете выяснить, сколько потоков и обновления пользовательского интерфейса. Посмотрите, как вы проверяете 'stopWatch.ElapsedTicks.Equals (TimeSpan.TicksPerSecond)'? Возможно, это никогда не будет правдой. Пока ваша петля работает, эти тики выскользнут из-под вас - вы их не увидите. И даже если вы это сделаете, вы потеряете больше разрешения при перезапуске таймера. Дрифт неизбежен. Это не проблема с .NET, это базовая функция компьютеров (по крайней мере, тех, которые вы используете). –
В моей собственной точке зрения резолюция, которую я пропустил, с основной концепцией выше, представляет собой крошечное количество наносекунд, поэтому разрешение как можно лучше. Но я признаю, что я ошибаюсь! – Novemberland
Какой смысл разрешения вы хотите? Разве это не значит, что вы не пропустите секунду, как это делал человек в связанном вопросе? Или вам действительно нужна куча десятичных знаков? –