2011-02-19 23 views
1

我需要等待和事件在給定的時間(30秒),然後超時,如果這段時間過去了。我需要做什麼?在vb.net使用計時器dll

上午發送命令到服務器從一個DLL,我需要等待響應,然後再發送。我想實現一個超時功能,爲什麼我需要使用計時器

我想使用一個計時器,但不知道如何在DLL中使用它。

+0

計時器是一個計時器。它是否在DLL中有什麼關係?你能否給我們提供更多關於你的應用程序如何組合在一起的細節,因爲此刻我看不到你的問題是什麼。 –

+0

@David Heffernan從dll發送命令到服務器,我需要等待響應才能發送另一個命令。我想實現一個超時功能 – Smith

回答

2

爲什麼使用定時器代表的時間間隔這一小段代碼說明通常是一個壞主意

Dim WithEvents myTimer As New Windows.Forms.Timer 'a timer 
Dim stpw As New Stopwatch 
Dim count As Long 

Const intervalValue As Integer = 1000 'some number of ms. s/b > 10 

Private Sub myTimer_Tick(ByVal sender As Object, _ 
         ByVal e As System.EventArgs) Handles myTimer.Tick 
    count += 1 
    Dim foo As Long = count * intervalValue 'the interval using tick firing every intervalValue ms. 
    Dim bar As Long = stpw.ElapsedMilliseconds 'the actual amount of time that has passed 

    Label1.Text = foo.ToString("n0") 
    Label2.Text = bar.ToString("n0") 

    Label3.Text = (bar - foo).ToString("n0") 'show error 
End Sub 

Private Sub Form1_Shown(ByVal sender As Object, _ 
         ByVal e As System.EventArgs) Handles Me.Shown 

    myTimer.Interval = intervalValue 'number of ms. 
    myTimer.Start() 
    stpw.Start() 

End Sub 

一個更好的方法是將定時器設置爲某個較小的值,比如一秒鐘你例如,並查看流逝的時間是否大於您正在查找的值。

+0

上午連接到SMTP服務器以發送郵件,我如何等待響應而不凍結類庫中的UI – Smith

+0

而不是試圖找出你所顯示的代碼應該是什麼意思是,你能告訴我嗎?你是說「Timer」沒有保證的分辨率,那麼*時間可能會超過你的預期?是的,我認爲這是衆所周知的。這不是使用計時器控制禁忌的原因;這是您需要正確檢查值的原因。 –

+0

如果您使用SMTP客戶端,它具有不會阻止的發送異步方法。 @cody - 是的,這是相當知名的。 – dbasnett

5

.NET中有四個定時器 - System.Windows.Forms.TimerSystem.Threading.TimerSystem.Timers.TimerSystem.Windows.DispatcherTimer

您可以像使用可執行文件一樣從類庫中使用它們中的任何一種,但是您需要根據自己的情況選擇最合適的一種 - 這一點不是很清楚。

如果您希望在UI線程中運行,則應該使用適當的基於UI的計時器;否則就是其他人之一。您可以提供的信息越多,我們就能提供的幫助就越多。