VB.NET эквивалент модуля Timeout.bas из VB6 - PullRequest
0 голосов
/ 30 декабря 2010

Я ищу VB.NET-код очень удобного небольшого * .bas-файла, который я использовал для использования в Visual Basic 6. Файл назывался timeout.bas, и это был самый лучший модуль для меня.Я хочу переключиться, чтобы наконец начать использовать VB.NET, но этот единственный файл сдерживает меня.Попытка использовать .NET без него - все равно, что калечить меня.Может кто-нибудь, кто-нибудь, пожалуйста, заставить этот код работать в .NET для меня?

Это всего лишь пара строк:

Attribute VB_Name = "Module1"
Sub timeout(duration)
starttime = Timer
Do While Timer - starttime < duration
DoEvents
Loop
End Sub

По сути, вы добавляете тот файл timeout.bas, который содержит этот код, и вы можете просто сделать:классно.Любой, ПОЖАЛУЙСТА, повторно сделайте это в VB.NET для меня!Спасибо!

Ответы [ 3 ]

4 голосов
/ 30 декабря 2010

Это худшая попытка неблокирования занятого цикла.

Вы можете сделать буквальный перевод в VB.Net, вставив в цикл while следующие две строки:

System.Threading.Thread.Current.Sleep(1000)
Application.DoEvents

Это будет спать на секунду, а затем обрабатывать цикл сообщений на каждой итерации.

Однако вы должны спросить себя, зачем вам ждать определенный период времени?Чего вы ждете и не можете ли вы ждать этого по-другому?Если основной поток ожидает завершения фонового рабочего процесса, вы можете просто позволить основному потоку продолжить и обработать цикл обработки сообщений в обычном режиме, а фоновый рабочий может просто уведомить его с помощью Dispatcher для отправки сообщения.

1 голос
/ 30 декабря 2010
Sub timeout(ByVal duration As Double)
    Dim starttime = DateTime.Now
    Do While (DateTime.Now  - starttime).TotalSeconds < duration
        My.Application.DoEvents()
    Loop
End Sub

При использовании этого свойства свойства Enable формы установите значение false.

0 голосов
/ 30 декабря 2010

Вы можете сделать:

System.Threading.Thread.Sleep(5000);

Такие вещи не одобряются в .Net и блокируют ваш пользовательский интерфейс.

попробуйте это

Sub timeout(seconds)
   Dim endtime = DateTime.Now.AddSeconds(seconds)
   Do While DateTime.Now < endtime
     threading.thread.sleep(100)
     application.doevents
   Loop
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...