特に調整されていないタッチスクリーンを使用している場合、ユーザーが約50ミリ秒で別のクリックに忍び込むことができることが私のPOSアプリケーションからわかったので、コントロールを無効にしても役に立ちません.
これが作成する問題の 1 つは、請求書を作成するときです。現在の請求書をクリアする前に 50 ミリ秒の遅延があるという理由だけで、重複したクリックで別の請求書を作成することはできません。
このような場合、次のようなパターンを使用します。
public static void ClearMouseClickQueue()
{
Message message;
while (PeekMessage(out message,IntPtr.Zero, (uint) MessageCodes.WM_MOUSEFIRST,(uint) MessageCodes.WM_MOUSELAST,1) != 0)
{
}
}
private object approvalLockObject = new object();
private void btnApproveTransaction_Click(object sender, EventArgs e)
{
ApproveTransactionAndLockForm();
}
private void ApproveTransactionAndLockForm()
{
lock (approvalLockObject)
{
if (ApprovalLockCount == 0)
{
ApprovalLockCount++;
ApproveTransaction();
}
else
{
CloseAndRetry();
}
}
}
private void ApproveTransaction()
{
ClearMouseClickQueue();
this.Enabled = false;
Logger.LogInfo("Before approve transaction");
MouseHelper.SetCursorToWaitCursor();
... validate invoice and print
}
画面を再度有効にする必要がある場合は、次のようにします。
this.Enabled = true;
ApprovalLockCount = 0;
DialogResult = DialogResult.None;