3

ユーザーが同じボタンで行うことができる2回のクリックの間に時間制限を設定する方法があるかどうか疑問に思っています。

これはイメージホストアプリケーションですが、現在、ユーザーはすばやくクリックすることでサーバーをフラッディングできます。したがって、ユーザーがクリックしてからもう一度クリックできるようになるまでに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 に答える