Windows窗体 - 高CPU使用率

时间:2017-12-01 22:53:34

标签: c#

新手在这里,我的表单正在监控Caps Lock状态,但是使用了大约50%的CPU,我认为这与Application.Idle + = Application_Idle和Application.Idle - = Application_Idle有关。一旦我删除了那些我的表单没有监控Caps Lock状态,有什么建议吗?

c := int64(22)

2 个答案:

答案 0 :(得分:0)

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        this.KeyDown += CapsLockMonitor;
        this.KeyPreview = true;
    }

    private void CapsLockMonitor(object sender, KeyEventArgs e)
    {
        if (Control.IsKeyLocked(Keys.CapsLock))
        {
            this.label1.Text = "Caps lock enabled!";
        }
        else
        {
            this.label1.Text = "Caps lock disabled!";
        }
    }
}

这似乎没有咀嚼我的所有CPU,我订阅了我的自定义委托的KeyDown事件。

答案 1 :(得分:0)

老实说,即使应用程序处于空闲状态,仍然会持续监视CapsLock状态,对我来说看起来有点过分。我的意思是,我不怀疑它是一个很好的功能,但我不知道它是否值得为它实现它。

如果您的应用程序必须在用户打开CapsLock时打字时警告用户,那么最好(和更简单)的方法是在用户尽快显示工具提示或小警告框关注允许文本编辑的Control。即使代码基于WPF框架,您也可以很好地了解我所谈论的here

为了执行您要查找的内容,您需要根据Global Keyboard Hook设置一个非常复杂的系统。在this link之后,您可以找到一篇非常详细的文章("在C#中处理全局鼠标和键盘钩子" ),描述如何完成此任务。该链接还包含一个用C#编写的演示代码,您可以部署并尝试。

一点摘录:

  

此类允许您点击键盘和鼠标和/或检测它们   活动,即使应用程序在后台运行或不运行   有任何用户界面。这个类引发了常见的.NET事件   使用KeyEventArgs和MouseEventArgs,您可以轻松检索任何内容   你需要的信息。

相关问题