Простой, не блокирующийся способ спать?

Я погуглил для этого, и считайте некоторые потоки здесь, но я не нашел простой способ иметь сон приложения 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 не ожидает в течение нескольких секунд?

Спасибо.

9
задан Joel Coehoorn 2 August 2010 в 17:07
поделиться

3 ответа

Это WinForms или WPF?

Если это WinForms, то можно просто использовать таймер вместо временного цикла. Тогда ваше приложение все равно будет реагировать и поднимать события.

В WPF, я думаю, вам пришлось бы сделать свой собственный таймер, основанный на Классе диспетчерского таймера.

7
ответ дан 4 December 2019 в 08:15
поделиться

Предложение таймера - это действительно лучший способ сделать это. Но если DoEvents все еще работает (я не делал VB с 5.0), вы можете сделать это:

For i = 0 To 600
    DoEvents
    Sleep(100)
Next

Это сделает 600 снов .1 секунды каждый, с DoEvents между каждым для обработки текущих событий. Скорость .1 секунды должна быть хорошим компромиссом между скоростью реакции (события обрабатываются в пределах .1 секунды) и потреблением процессора (делайте это слишком быстро, и ваше приложение начнет потреблять значительное количество процессорного времени даже во время ожидания).

2
ответ дан 4 December 2019 в 08:15
поделиться
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 можно изменить на десятые или сотые доли секунды

8
ответ дан 4 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: