2010-12-30 11 views
0

Ich bin auf der Suche nach dem VB.NET-Code einer sehr handlichen kleinen *. Bas-Datei, die ich in Visual Basic 6 verwendet. Die Datei hieß timeout.bas und es war das größte Modul für mich. Ich möchte, um zu beginnen, VB.NET schließlich zu verwenden, aber diese einzelne Datei hält mich zurück. Der Versuch, .NET ohne es zu benutzen, ist wie eine Lähmung für mich. Kann jemand, jemand diesen Code in .NET für mich arbeiten lassen?VB.NET-Äquivalent von Timeout.bas-Modul von VB6

Es ist nur ein paar Zeilen:

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

Grundsätzlich fügen Sie, dass timeout.bas Datei, die diesen Code enthält, und Sie können einfach tun:

Text1.text = "hello" 
timeout .5 
Text1.text "World!" 

Es ist so genial. Wer es noch einmal in VB.NET für mich tut! Vielen Dank!

Antwort

4

Das ist der schlimmste Versuch einer nicht blockierenden Busy-Schleife.

Sie können, indem sie in der while-Schleife die folgenden zwei Zeilen die wörtliche Übersetzung VB.Net tun:

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

Diese für eine zweite schlafen würde und dann verarbeiten bei jeder Iteration die Nachrichtenschleife.

Allerdings sollten Sie sich wirklich fragen, warum müssen Sie für einen bestimmten Zeitraum warten? Worauf wartest du noch und kannst du nicht anders darauf warten? Wenn der Hauptthread auf den Abschluss eines Hintergrund-Workers wartet, können Sie den Hauptthread einfach weiterlaufen lassen und die Nachrichtenschleife normal verarbeiten. Der Hintergrund-Worker kann ihn lediglich mithilfe des Dispatchers benachrichtigen, um die Nachricht zu senden.

0

Sie könnten tun:

System.Threading.Thread.Sleep(5000); 

Thant Art der Sache in .Net entmutigt und wird Ihre UI perren.

versuchen, diese

Sub timeout(seconds) 
    Dim endtime = DateTime.Now.AddSeconds(seconds) 
    Do While DateTime.Now < endtime 
    threading.thread.sleep(100) 
    application.doevents 
    Loop 
End Sub 
+0

Dies sollte für Sie arbeiten, aber Sie werden immer noch überlegen wollen, warum Sie tatsächlich warten ... Sie sollten sich Zeitgeber und Timer-Ereignisse betrachten. –

1
Sub timeout(ByVal duration As Double) 
    Dim starttime = DateTime.Now 
    Do While (DateTime.Now - starttime).TotalSeconds < duration 
     My.Application.DoEvents() 
    Loop 
End Sub 

Stellen Sie die auf false Aktivieren Eigenschaft des Formulars, wenn Sie diese verwenden.