3

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

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

请注意,我不想使用线程,因为我不想挂起我的程序,原因很简单,当时它将上传图像,并且用户在上传时还想在应用程序上做其他事情.

谢谢!

4

1 回答 1

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
于 2013-01-04T09:12:47.573 回答