2010-12-30 10 views
0

Visual Basic 6で使用していた非常に便利な小さな* .basファイルのVB.NETコードを探しています。このファイルはtimeout.basと呼ばれていました私にとってこれまで最高のモジュールでした。私はVB.NETを使用して起動するように切り替えたいですが、この1つのファイルは私を抱きしめています。それを使わずに.NETを使用しようとすると、私を壊滅させるようなものです。誰か誰もがこのコードを.NETで動作させてくれますか?VB.NETのTimeout.bas Moduleと同等のVB6

それが唯一の数行です:

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

それはとても素晴らしいです:基本的にあなたがそのコードが含まれており、あなただけ行うことができますtimeout.basファイルがあることを追加

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

。誰でも私のためにVB.NETでそれをやり直してください!ありがとう!

答えて

4

これは、ノンブロッキング・ビジー・ループでの最悪の試みです。

あなたはwhileループに以下の2行入れてVB.Netへの直訳を行うことができます。これが第二のために寝た後、各反復でメッセージループを処理し

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

を。

しかし、あなたは本当にあなたがなぜ特定の期間待たなければならないのか自分自身に尋ねるべきでしょうか?あなたは何を待っていますか、それを別のやり方で待つことはできませんか?メインスレッドがバックグラウンドワーカーを終了するのを待っている場合は、メインスレッドを続行してメッセージループを通常どおり処理するだけで、バックグラウンドワーカーはDispatcherを使用してメッセージを送信することができます。

0

あなたが行うことができます:事の

System.Threading.Thread.Sleep(5000); 

・タントソートがネットに落胆されており、あなたのUIをロックします。

は、あなたがこれを使用する場合、フォームのプロパティをfalseに設定して有効にし、この

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

これはうまくいくはずですが、まだ実際に待っている理由を考えてみたいと思います...タイマーとタイマーイベントを検討する必要があります。 –

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

を試してみてください。

関連する問題