POS 응용 프로그램에서 사용자가 다른 클릭으로 몰래 들어올 수 있다는 것을 발견 했으므로 컨트롤을 사용하지 않도록 설정해도 도움이되지 않습니다. 특히 보정하지 않은 터치 스크린을 사용할 때 특히 그렇습니다.
현재 생성 된 문제 중 하나는 인보이스를 생성 할 때 현재 인보이스를 삭제하기 전에 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에 대한 필수 정의 –