您的位置:首页 > 其它

【原创】使用timer、imagelist与notifyicon控件实现图标闪烁-----并避免了GDI泄漏(重点)

2011-09-07 08:11 525 查看
一、未考虑GDI泄漏的代码:后果是直接导致程序的GDI数一直增加,直到程序crash(崩溃)为止

int i = 0;

private void timer1_Tick(object sender, EventArgs e)
{
Bitmap btm1 = new Bitmap(this.imageList1.Images[0]);
Icon icon1 = Icon.FromHandle(btm1.GetHicon());
Bitmap btm2 = new Bitmap(this.imageList1.Images[1]);
Icon icon2 = Icon.FromHandle(btm2.GetHicon());

if (i < 1)
{
this.notifyIcon1.Icon = icon1;
i = 1;
}
else
{
this.notifyIcon1.Icon = icon2;
i = 0;
}

}

二、修改之后的代码:

int i = 0;

[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static bool DestroyIcon(IntPtr handle);

private void timer1_Tick(object sender, EventArgs e)
{
Bitmap btm1 = new Bitmap(this.imageList1.Images[0]);
Icon icon1 = Icon.FromHandle(btm1.GetHicon());
Bitmap btm2 = new Bitmap(this.imageList1.Images[1]);
Icon icon2 = Icon.FromHandle(btm2.GetHicon());

if (i < 1)
{
this.notifyIcon1.Icon = icon1;
i = 1;
}
else
{
this.notifyIcon1.Icon = icon2;
i = 0;
}

DestroyIcon(icon2.Handle);
DestroyIcon(icon1.Handle);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐