2013-01-04 2 views
3

호스트하는 방법이 있다면 동일한 단추에서 두 번 클릭 할 때까지 시간 지연을 설정하는 것이 궁금합니다.VB.NET에서 단추를 다시 클릭하기 전에 시간 지연을 만들고 싶습니다.

이미지 호스트 응용 프로그램이지만 지금 사용자는 빠르게 클릭하여 서버를 플러딩 할 수 있습니다. 따라서 사용자가 클릭 한 시점과 다시 클릭 할 수있는 시점 사이에 10 초의 시간 지연을 설정하는 방법이 있습니다. 그리고 그 시간에 클릭하려고하면 시간이 다할 때까지 클릭을 할 수 없다는 경고를 보내는 MsgBox가 생깁니 까?

그 때 이미지를 업로드하고 사용자가 원할 응용 프로그램에 다른 것들이 있다는 간단한 이유 때문에 내 프로그램을 멈추고 싶지 않기 때문에 스레딩을 사용하고 싶지 않습니다. 업로드하는 동안해라.

감사합니다.

+1

"사용자가 빠른 속도로 클릭하여 내 서버를 넘치게 할 수 있습니다"는 - 아마 더 나은 일부 (조절을 구현하는 아마도 사용자 당 기준으로) 서버 쪽에서 자신을 더 잘 보호하기 위해 –

+0

예, 이것도 추가 할 계획입니다. –

답변

2

당신이 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 
+0

이것은 마치 매력처럼 일했습니다! 고마워요! –

관련 문제