2012-07-12 4 views
0

я получил этот код в VB6vb6 в vb.net

Private Sub pause(ByVal interval As Variant) 
    Dim Current As Variant 

    Current = Timer 
    Do While Timer - Current < Val(interval) 
     DoEvents 
    Loop 
End Sub 

Как конвертировать в vb.net? Я пробовал этот путь, но он не работает.

Где ошибка?

Private Sub pause(ByVal interval As Single)    
     Dim newDate As Date  
     newDate = DateAndTime.Now.AddSeconds(interval) 

     While DateAndTime.Now.Second <> newDate.Second     
      Application.DoEvents()   
     End While  
End Sub 

Благодаря

ответ

0

Я думаю, что следующее лучшее преобразование исходного кода (тонко отличий от andygrips ответа):

Private Sub Pause(ByVal seconds As Integer) 
    Dim current As Date 

    current = DateTime.Now 
    Do While (DateTime.Now - current).TotalSeconds < seconds 
     Application.DoEvents() 
    Loop 
End Sub 

Однако обратите внимание, что использование DoEvents в .NET лучше вообще избегать

+0

У вас есть предложение заменить DoEvents? Спасибо. – yonghan79

+0

@ yonghan79 Вам нужно взглянуть на многопоточность - посмотрите [класс BackGroundWorker] (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx) –

+0

Спасибо, я буду попробуйте его. По мере того, как вы можете взглянуть на мой код, я отправлю код, если с вами все в порядке. :) Я пробовал преобразованный sub, это дает мне ошибку, возможно ли это вызвано Application.DoEvents? – yonghan79

1

Это только избегающим While если Now секунды равна newDate секунд. Попробуйте вместо этого:

Private Sub pause(ByVal interval As Single) 
     Dim waitUntil As Date = DateAndTime.Now.AddSeconds(interval) 
     While DateAndTime.Now < waitUntil 
      Application.DoEvents() 
     End While 
    End Sub 

Также я могу предположить, что вы называете свои методы с использованием PascalCase (первая буква имени метода капитализируются).

+0

По Стандартные соглашения об именах Microsoft для .NET, частные члены должны быть в camelCase, а публичные члены должны быть в PascalCase. –

+0

Я не считаю, что Microsoft на самом деле говорит, что вы должны использовать camelCase для частных пользователей, только чтобы вы использовали PascalCase для публичных пользователей. Я использую PascalCase для всех методов, потому что считаю его более читаемым. – andygjp

+0

@andygjp - Есть плюсы и минусы всех соглашений об именах, но в конечном итоге сопротивление бесполезно! –

Смежные вопросы