我有一个用 C# 编写的针对 .NET Compact Framework 3.5 的应用程序,在 Windows CE 上运行。有时,会在 UI 线程上执行持续一秒左右的操作。我目前设置的是Cursor.Current
属性来指示应用程序正忙,但这并不能阻止急切的用户排队鼠标事件。这有时会导致意外的点击。
在 .NET Compact Framework 平台上忽略排队的鼠标消息的最佳方法是什么?遗憾的是,代码必须在 UI 线程上运行。
禁用控件对您没有帮助,因为我从 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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)