당신이 MsgBox 및 스레딩을 언급 한 것을 바탕으로 클라이언트가 Windows 응용 프로그램이라고 가정합니다. 10 초 동안 버튼을 비활성화 할 수 있습니다.
Imports System.Threading
Public Class MainForm
Private Sub MyButton_Click() Handles MyButton.Click
Me.DisableButtonAsync(10)
Me.PerformWork()
End Sub
Private Sub PerformWork()
' Upload image or whatever.
End Sub
Private Sub DisableButtonAsync(ByVal seconds As Int32)
Me.MyButton.Enabled = False
Dim uiScheduler = TaskScheduler.FromCurrentSynchronizationContext()
Task.Factory _
.StartNew(Sub() Thread.Sleep(seconds * 1000)) _
.ContinueWith(Sub(t) Me.MyButton.Enabled = True, uiScheduler)
End Sub
End Class
... 또는 더 예뻐 .NET 4.5 동등한 : 여기에 몇 가지 .NET 4.0 코드의
이
Imports System.Threading
Public Class MainForm
Private Sub MyButton_Click() Handles MyButton.Click
Me.DisableButtonAsync(10)
Me.PerformWork()
End Sub
Private Sub PerformWork()
' Upload image or whatever.
End Sub
Private Async Sub DisableButtonAsync(ByVal seconds As Int32)
Me.MyButton.Enabled = False
Await Task.Delay(seconds * 1000)
Me.MyButton.Enabled = True
End Sub
End Class
"사용자가 빠른 속도로 클릭하여 내 서버를 넘치게 할 수 있습니다"는 - 아마 더 나은 일부 (조절을 구현하는 아마도 사용자 당 기준으로) 서버 쪽에서 자신을 더 잘 보호하기 위해 –
예, 이것도 추가 할 계획입니다. –