gpt4 book ai didi

c# - 忽略排队的鼠标事件

转载 作者:太空狗 更新时间:2023-10-29 18:33:42 26 4
gpt4 key购买 nike

我有一个用 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;

关于c# - 忽略排队的鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672533/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com