在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函数有关,但不知道如何避免它。
答案 0 :(得分:0)
如果将代码的闪烁部分移动到一个单独的线程,则闪烁应该由任何其他事件独立,并且应用程序将保持闪烁,即使你将鼠标按下关闭按钮也是如此。