最近某个WinForm项目中,一个窗体中放了不少按钮,都用图片作为背景,启动时发现卡顿无比,不断闪烁很长时间界面才能加载完成。
尝试拿掉图片后,就不卡了。但各种背景图片又是必须的,怎么办?
现象是界面上已经看到图片了,但还是不停闪烁,推测是设置图片之后,有其他关于界面的代码执行,导致窗体需要不断刷新重现加载。
尝试一番之后,找到了改善卡顿的办法,步骤如下:
1. 不要在设计器中设置背景图片,设计器中的按钮,就让它没有背景。
2. 在代码中为控件设置背景图片:
private void initUI(){
//Button
button1.BackgroundImage = Proj1.Properties.Resources.bgStart;
button1.BackgroundImageLayout = ImageLayout.Stretch;
//Penel
panel.BackgroundImage = Proj1.Properties.Resources.bgLogin;
panel.BackgroundImageLayout = ImageLayout.Stretch;
//Form
this.BackgroundImage = Proj1.Properties.Resources.bgMain1;
this.BackgroundImageLayout = ImageLayout.Stretch;
}
3. 在窗体的load方法中进行设置背景图的操作,并且,如果有其他对于界面的操作,那么其他操作放在前面,设置图片的操作放在最后:
private void FormMain1_Load(object sender, EventArgs e)
{
//其他界面操作
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
//设置图片的操作
initUI();
}
问题解决,启动速度快了很多。