gpt4 book ai didi

c# - 在 C# 中清除鼠标缓冲区

转载 作者:行者123 更新时间:2023-11-30 17:52:58 24 4
gpt4 key购买 nike

我在 winform 的代码隐藏文件中执行此操作时遇到问题:

// Waiting Cursor + disabling form
Cursor = Cursors.WaitCursor;
this.Enabled = false;

// Synchronous method
SomeWork();

// Re-enabling form
Cursor = Cursors.Default;
this.Enabled = true;

当前行为

例如,在 Somework() 期间单击按钮将在重新启用表单后执行与该按钮关联的方法。

预期行为

我不希望表单在禁用时存储用户的点击事件。

问题

有没有办法清空表单的点击缓存(这样我就可以在重新启用表单之前执行此操作)?

重要修改

一个可能的简单 解决方案是在表单的代码隐藏中实现IMessageFilter 接口(interface)。使用此 PreFilterMessage 禁用左侧似乎很容易:

public bool PreFilterMessage(ref Message m)
{
// Blocks all the messages relating to the left mouse button.
return (m.Msg >= 513 && m.Msg <= 515) ;
}

但是再次禁用和重新启用鼠标左键单击不会清空鼠标缓冲区 ...

最佳答案

问题是进程在同一个线程中运行,所以在进程开始运行之前表单实际上并没有被禁用。最简单的做法是使用 Application.DoEvents() 强制它在启动进程之前将所有内容设置为禁用,但更专业(也可能更安全)的方法是在另一个线程中运行耗时的进程。

注意:在我自己的编程中遇到另一个障碍后,我发现您可能必须运行 Application.DoEvents() 才能再次启用所有内容——它会触发用户在禁用控件上所做的任何点击,而不是等待要完成的过程——启用控件——然后触发点击。

显然 DoEvents 很乱,我应该使用线程。

关于c# - 在 C# 中清除鼠标缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944595/

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