2012-02-24 4 views
1

System.Thread.Sleep(interval)を使用せずに遅延を作成する方法を知りたいですか?VB.NETマルチスレッドSerialPort SMS遅延

私のアプリケーションは、GSMモデムとのインターフェイスにシリアルポートを使用してSMSINBOXを読み取る無限ループで実行されます。readSMSINBOX()の後に遅延が続きます...ここでの問題は遅延です。それは私のアプリのすべてのコントロールをハングアップします。他の機能は、読み込み以外に、usermanagement、consoleなどです。どのように私はSYSTEM.TIMERSまたはSYSTEM.THREADINGまたはBACKGROUNDworkerを使用してアプリを吊ることなく時間を消費する遅延を実装することができますどのようなアイデア...してください...私はすることができますここにすべてのコードを投稿しないでください。ライブサイトに自分のコードを公開する方法を知らないでください。ちょうど純粋なNOOB ..

+0

?あなたの目標はreadSMSINBOX()を定期的に発生させることです、30秒ごとに言いましょうか? –

+0

あなたの懸念に感謝rokjarc。はい、まったく...しかし、 'readINBOX()'と 'sendMESSAGE()'は、私のアプリでは '** SYSTEM.THREADING.THREAD.SLEEP()'を使用してUIスレッドをハングする機能です** **(NOT RESPONDING)アプリのすべてのコントロール。それは問題です...別のスレッドで実行される可能性がある遅延は正確ですが、_時間も消費します。 cmdButtons、txtbox、tabsなどのコントロールにアクセスできるようにするには、これが必要です。 – Jed

答えて

1

まあ、タイマーはあなたが必要なものを正確に行うべきです(UIをブロックしません)。タイマーの

正確な実装は、VB.NETのバージョンによって異なりますが使用しているが、 あなたはここでタイマーを使用しての良い(とダウンロード)の例を見つけることができます:あなたはSystem.Timers

をインポートする必要があります Working with Timer Control in VB.NET

myTimerは、メインフォームのコード

Timer myTimer 

あなたがそれを設定し、Form1_load

でそれを起動することができて可変することができ
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) 

    myTimer = new Timer(30000) 
    myTimer.Enabled = true 
    addhandler myTimer.Tick,addressof OnTimerEvent 

End Sub 

そして、あなたの(ダニ)ハンドラは次のようなものになるだろう:あなたは遅れにより、正確に何を意味する

Private Sub OnTimerEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) 

    'here you can call you communication routines 

End Sub 
+0

Ok。ありがとうございますrokjarc ...しかし、どのように私はOnTimerEvent()を発射すると遅延間隔を変更することはできますか? – Jed

+0

それを得ました。どうもありがとうございました。ありがとうございました。あなたは私をたくさん助けてくれました.-D – Jed

+0

よろしくお願いします。 –