Отключение элементов управления не поможет вам, как я узнал из моего приложения для POS, что пользователи могут красться еще одним щелчком мыши за 50 мс, особенно при использовании сенсорного экрана, который не откалиброван.
Одна из проблем, которую это создает, заключается в том, что при создании счета невозможно, чтобы повторный щелчок произвел другой счет, просто потому, что до очистки текущего счета-фактуры существует задержка в 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;