Приостановка Sub

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

TohaSan
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 20.03.2006 (Пн) 17:10

Приостановка Sub

Сообщение TohaSan » 28.06.2006 (Ср) 18:18

Мне нужно приостановить выполнение процедуры на заданное количество милисекунд, например 700. Как это сделать?
Я пробовал через API:
Private Declare Sub Sleep Lib "kernel32.dll" (ByRef dwMilliseconds As Int32)
Sub x()
MsgBox("1")
Sleep(700)
MsgBox("2")
End Sub
Что-то не работает. Может что-нибудь не так?
Также пробовал через: System.Threading.Thread.Sleep(700)
Но на заданное число милисекунд останавливается вся программа.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 28.06.2006 (Ср) 18:25

Вместо ByRef надо ByVal. И, действительно, приостановится вся программа.
Изображение

TohaSan
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 20.03.2006 (Пн) 17:10

Сообщение TohaSan » 29.06.2006 (Чт) 12:27

А как мне приостановить только процедуру, а не всю программу?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 29.06.2006 (Чт) 12:32

Вынести её в отдельный поток.
Изображение

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 29.06.2006 (Чт) 13:11

в .NET ненужно использовать эту АПИ, есть встроенные метод.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Приостановка Sub

Сообщение tyomitch » 29.06.2006 (Чт) 13:36

TohaSan писал(а):Также пробовал через: System.Threading.Thread.Sleep(700)
Но на заданное число милисекунд останавливается вся программа.
Изображение

SpawnProduction
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 29.06.2006 (Чт) 16:36
Откуда: Россия, Москва, Зеленоград

Сообщение SpawnProduction » 29.06.2006 (Чт) 17:06

Также пробовал через: System.Threading.Thread.Sleep(700)
Но на заданное число милисекунд останавливается вся программа.

Естественно... потому как ты тормозишь текущий поток.
в .NET ненужно использовать эту АПИ, есть встроенные метод.
Да тут вообще API лучше не вызывать...

Так, решение проблемы тебе уже в общем-то сказали
Вынести её в отдельный поток.

Выглядит примерно так:

Код: Выделить всё
Dim NewThread As New System.Threading.Thread(AddressOf test)
    Private Sub test()
        MsgBox("1")
        NewThread.Sleep(10000)
        MsgBox("2")
    End Sub
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        NewThread.Start()
    End Sub

TohaSan
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 20.03.2006 (Пн) 17:10

Сообщение TohaSan » 30.06.2006 (Пт) 11:26

Спасибо!!! :D
Представляете, я тоже так писал, но этот код у меня подчеркивался таким цветом, что будто может возникнуть ошибка (был зеленый цвет). Студия говорила, что этот метод Shared и может лучше заменить на Thread.Sleep. Оказывается: менять ничего не надо было! Спасибо!!!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 30.06.2006 (Пт) 12:57

NewThread.Sleep(10000)

это, конечно, не то, чтобы не правильно, а слишком ситуативно. Лучше сделать через текущий поток, а не ссылкой на конкретный.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 65

    TopList