View Full Version : [VB] Realizzare un timeout, come?
Matrixbob
22-05-2009, 10:56
Esegui questa istruzione in tot tempo, altrimenti esci o continua.
Cosa si puō usare per esprimere questo comando?
Ho trovato qualcosa, ma non capisco come funzionano:
TimeSpan (http://msdn.microsoft.com/it-it/library/system.timespan.aspx)
Uso del timeout (http://msdn.microsoft.com/it-it/library/1bff9tk5.aspx)
:confused: :mbe: :stordita:
Matrixbob
22-05-2009, 11:12
In pseudo-linguaggio:
entro il timeout prova ad eseguire quanto segue;
Dim LogRes As Boolean = oLib.Logon(par1, par2, par3, par4)
fine del blocco da eseguire entro il timeout.
Tecniche possibili ce ne sono parecchie. Una delle pių immediate ( che in pratica rispetta grosso modo il tuo pseudo-codice ) č l'utilizzo di un Thread separato in cui puoi gestire una semplice Sub, o un qualunque metodo di una classe, ad esempio :
Private Sub NomeMetodo()
My.Computer.FileSystem.CopyDirectory("C:\TEST_Sorgente", "C:\TEST_Destinazione")
MsgBox("NomeMetodo Completato")
End Sub
Cerco di fare una copia di una dir, ma voglio che l'operazione sia comunque interrotta entro e non oltre un TimeOut di 2 secondi, perciō :
> TimeOut espresso direttamente in millisecondi :
Dim timeOutMSecs As Integer = 2000 ' Millisecondi TimeOut
Dim THD As New System.Threading.Thread(AddressOf NomeMetodo)
THD.Start()
If THD.Join(timeOutMSecs) = False Then
THD.Abort()
MsgBox("TimeOut [" & timeOutMSecs & "] Raggiunto.")
End If
> oppure con un TimeSpan :
Dim timeOutMSecs As Integer = 2000 ' Millisecondi TimeOut
Dim THD As New System.Threading.Thread(AddressOf NomeMetodo)
THD.Start()
If THD.Join(TimeSpan.FromMilliseconds(timeOutMSecs)) = False Then
THD.Abort()
MsgBox("TimeOut [" & timeOutMSecs & "] Raggiunto.")
End If
Ovvio che cosė, se il metodo coinvolge oggetti e controlli del Thread chiamante, si incorre in un'eccezione Cross-Thread, ma non č nč il tuo caso, nč quello del mio esempio.
Per un esempio pratico di come funzionano i TimeSpan, dai un'occhiata anche qui :
http://www.hwupgrade.it/forum/showthread.php?t=1887994
[ mio post #6 ]
;)
Matrixbob
22-05-2009, 14:10
Tecniche possibili ce ne sono parecchie. Una delle pių immediate ( che in pratica rispetta grosso modo il tuo pseudo-codice ) č l'utilizzo di un Thread separato in cui puoi gestire una semplice Sub, o un qualunque metodo di una classe, ad esempio :
Private Sub NomeMetodo()
My.Computer.FileSystem.CopyDirectory("C:\TEST_Sorgente", "C:\TEST_Destinazione")
MsgBox("NomeMetodo Completato")
End Sub
Cerco di fare una copia di una dir, ma voglio che l'operazione sia comunque interrotta entro e non oltre un TimeOut di 2 secondi, perciō :
> TimeOut espresso direttamente in millisecondi
Dim timeOutMSecs As Integer = 2000 ' Millisecondi TimeOut
Dim THD As New System.Threading.Thread(AddressOf NomeMetodo)
THD.Start()
If THD.Join(timeOutMSecs) = False Then
THD.Abort()
MsgBox("TimeOut [" & timeOutMSecs & "] Raggiunto.")
End If
> oppure con un TimeSpan
Dim timeOutMSecs As Integer = 2000 ' Millisecondi TimeOut
Dim THD As New System.Threading.Thread(AddressOf NomeMetodo)
THD.Start()
If THD.Join(TimeSpan.FromMilliseconds(timeOutMSecs)) = False Then
THD.Abort()
MsgBox("TimeOut [" & timeOutMSecs & "] Raggiunto.")
End If
Ovvio che cosė, se il metodo coinvolge oggetti e controlli del Thread chiamante, si incorre in un'eccezione Cross-Thread, ma non č nč il tuo caso, nč quello del mio esempio.
Per un esempio pratico di come funzionano i TimeSpan, dai un'occhiata anche qui :
http://www.hwupgrade.it/forum/showthread.php?t=1887994
[ mio post #6 ]
;)
:ave: :nera:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.