在VB.NET中,我想在再次单击按钮之前创建一个时间延迟

时间:2013-01-04 08:58:13

标签: vb.net button upload timedelay

我想知道是否有办法主持设置用户可以在同一个按钮上进行两次点击之间的定时延迟。

它是一个图像宿主应用程序,但是现在用户可以通过快速点击来充斥我的服务器。那么有没有办法在用户点击和再次点击之间设置10秒的时间延迟。如果他们确实试图点击那个时间它会有一个MsgBox警告他们,他们不能点击,直到时间到了?

请注意我不想使用线程,因为我不想挂起我的程序,原因很简单,因为它会在当时上传图像,并且用户希望在应用程序上执行其他操作正在上传。

谢谢!

1 个答案:

答案 0 :(得分:2)

基于你提到MsgBox和Threading,我假设客户端是Windows应用程序。您可以禁用该按钮10秒钟。这是一些.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 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等价物:

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