Lo puedes hacer de varias maneras, la más sencilla es mediante una variable que le diga al loop si la aplicación se ha cerrado, cambiando el estado de esta variable cuando se esté cerrando el form:
También puedes hacerlo usando un hilo independiente, pero necesitarías utilizar delegados y usar la propiedad InvokeRequired y la función Invoke() del formulario. Espero que el primer método te sirva.
Código (vbnet) [Seleccionar]
Public Class Form1
Dim AplicacionCerrada As Boolean = False
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim SecA As TimeSpan, SecB As TimeSpan
SecA = TimeSpan.FromTicks(Date.Now.Ticks)
Do
SecB = TimeSpan.FromTicks(Date.Now.Ticks).Subtract(SecA)
Me.Text = CStr(SecB.Seconds)
If CInt(SecB.Seconds) = 10 Then Exit Do
My.Application.DoEvents()
If AplicacionCerrada = True Then End
Loop 'While (podría poner condición y si se cumple sale antes de los 10 segundos)
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
AplicacionCerrada = True
End Sub
End Class
También puedes hacerlo usando un hilo independiente, pero necesitarías utilizar delegados y usar la propiedad InvokeRequired y la función Invoke() del formulario. Espero que el primer método te sirva.