私のPOSアプリケーションからは、特に校正されていないタッチスクリーンを使用している場合、約50msでユーザーが別のクリックで覗き見ることができるので、コントロールを無効にすることは役に立ちません。
現在発生している問題の1つは、請求書を作成するときに、現在の請求書を消去するまでに50msの遅延があるため、重複したクリックで別の請求書を作成することはできません。このような場合には
、私はこれに類似したパターンを使用します。
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;
完全性のために、私がリストアップしましたhttp://pastebin.ca/1369082のp/invokeに必要な定義 –