将鼠标左键放在标题栏上

时间:2016-06-12 03:59:58

标签: c# .net winforms

在Windows窗体应用程序中,当我将鼠标指针放在窗体的标题栏上时,向左按住按钮并保持它(但不要移动指针),事件循环会冻结一段很短的时间。

此外,在标题栏上的关闭按钮上按住左键会无限期地冻结表格。

我想避免这种冻结,因为我的应用程序正在对System.Windows.Forms.Timer触发的绘图进行实时更新。

这是示例应用程序。此应用程序只显示一个表单,并快速闪烁其颜色:

using System;
using System.Windows.Forms;
using System.Drawing;

namespace WindowsFormsApplication1
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            var form = new Form();
            var flag = false;
            var timer = new Timer();
            timer.Interval = 100;
            timer.Tick += (o, e) =>
            {
                var brush = flag ? Brushes.LightGray : Brushes.DarkGray;
                using (var g = form.CreateGraphics())
                    g.FillRectangle(brush, form.ClientRectangle);
                flag = !flag;
            };
            timer.Start();
            Application.Run(form);
        }
    }
}

此示例应用程序始终闪烁。但是当在标题栏上按住鼠标(或标题栏上的关闭按钮)时,它会停止闪烁。

我猜这个问题与DragDetect函数有关,但不知道如何避免它。

1 个答案:

答案 0 :(得分:0)

如果将代码的闪烁部分移动到一个单独的线程,则闪烁应该由任何其他事件独立,并且应用程序将保持闪烁,即使你将鼠标按下关闭按钮也是如此。