Я погуглил для этого, и считайте некоторые потоки здесь, но я не нашел простой способ иметь сон приложения VB.Net на некоторое время и все еще сохранить приложение быстро реагирующим:
Imports System.Net
Imports System.IO
Imports System.Text
Imports System.Text.RegularExpressions
Imports System.Threading.Thread
[...]
''#How to keep screen frop freezing?
While True
ListBox1.Items.Clear()
ListBox1.Items.Add("blah")
''#Not much difference
ListBox1.Refresh()
''#Wait 1mn
Sleep(60000)
End While
Есть ли действительно, никакое простое, не блокирующееся решение иметь приложение VB.Net не ожидает в течение нескольких секунд?
Спасибо.
Это WinForms или WPF?
Если это WinForms, то можно просто использовать таймер вместо временного цикла. Тогда ваше приложение все равно будет реагировать и поднимать события.
В WPF, я думаю, вам пришлось бы сделать свой собственный таймер, основанный на Классе диспетчерского таймера.
Предложение таймера - это действительно лучший способ сделать это. Но если DoEvents
все еще работает (я не делал VB с 5.0), вы можете сделать это:
For i = 0 To 600
DoEvents
Sleep(100)
Next
Это сделает 600 снов .1 секунды каждый, с DoEvents между каждым для обработки текущих событий. Скорость .1 секунды должна быть хорошим компромиссом между скоростью реакции (события обрабатываются в пределах .1 секунды) и потреблением процессора (делайте это слишком быстро, и ваше приложение начнет потреблять значительное количество процессорного времени даже во время ожидания).
Public Sub ResponsiveSleep(ByRef iMilliSeconds As Integer)
Dim i As Integer, iHalfSeconds As Integer = iMilliSeconds / 500
For i = 1 To iHalfSeconds
Threading.Thread.Sleep(500) : Application.DoEvents()
Next i
End Sub
Вызов ResponsiveSleep, чтобы приостановить конкретный фрагмент кода, сохраняя при этом достаточно быстрое реагирование приложения. Чтобы сделать приложение более отзывчивым, iHalfSeconds можно изменить на десятые или сотые доли секунды