c#应用程序界面加载缓慢

时间:2013-06-12 07:40:59

标签: c# user-interface visual-studio-2012 resources

我正在为应用程序创建一个界面。背景都是1x1像素。在设计时,界面非常慢(visual studio 2012)。移动组件是超级滞后的。如果我运行应用程序,则加载接口大约需要10秒钟。

可以隐藏界面的某些部分。他们再次可见,他们需要时间来逐步建立/加载。

如何改善这一点并使界面更加平滑/加载更快?

enter image description here

源代码:

namespace WindowsFormsApplication1
{
    public partial class MapTool : Form
    {
        public int Pin_Berekenen = 0;
        public int pin_Settings = 0;

        public MapTool()
        {
            InitializeComponent();
            BlackSetupUI();
            panel_Berekenen.Visible = false;
            panel_settings.Visible = false;

        }

        void BlackSetupUI()
        {
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            SetStyle(ControlStyles.Selectable, false);
            pictureBox_RouteBerekenen.BackColor = Color.Transparent;
            panel_Berekenen.BackColor = Color.Transparent;
            pictureBox_settings.BackColor = Color.Transparent;
            button_pin_berekenen.FlatAppearance.BorderSize = 0;
            button_Berekenen.FlatAppearance.BorderSize = 0;
            label_berekening1.Parent = pictureBox_bar;
            label_berekening1.BackColor = Color.Transparent;
            label_Berekening2.Parent = pictureBox_bar;
            label_Berekening2.BackColor = Color.Transparent;
            label_verschil.Parent = pictureBox_bar;
            label_verschil.BackColor = Color.Transparent;
            button_pin_settings.FlatAppearance.BorderSize = 0;
            label_RouterBerekenen.Parent = pictureBox_bar;
            label_Settings.Parent = pictureBox_bar;
            pictureBox_settings.Parent = pictureBox_bar;
            pictureBox_RouteBerekenen.Parent = pictureBox_bar;
            pictureBox_innectis.Parent = pictureBox_bar;
            label_innectis.Parent = pictureBox_bar;
        }

        void WhiteSetupUI()
        {


        }



        private void MapTool_MouseClick(object sender, MouseEventArgs e)
        {
            if (Pin_Berekenen == 0)
            {
                panel_Berekenen.Visible = false;
            }
            else
            {
                return;
            }

            if (pin_Settings == 0)
            {
                panel_settings.Visible = false;
            }
            else
            {
                return;
            }
        }

        private void button_pin_berekenen_Click(object sender, EventArgs e)
        {
            switch (Pin_Berekenen)
            {
                case 0:
                    Pin_Berekenen = 1;
                    button_pin_berekenen.Image = Properties.Resources.Pinned;
                    break;

                case 1:
                    Pin_Berekenen = 0;
                    button_pin_berekenen.Image = Properties.Resources.Pin;
                    break;

                default:
                    break;
            }
        }

        private void button_pin_settings_Click(object sender, EventArgs e)
        {
            switch (pin_Settings)
            {
                case 0:
                    pin_Settings = 1;
                    button_pin_settings.Image = Properties.Resources.Pinned;
                    break;

                case 1:
                    pin_Settings = 0;
                    button_pin_settings.Image = Properties.Resources.Pin;
                    break;

                default:
                    break;
            }
        }

        private void pictureBox_settings_MouseHover_1(object sender, EventArgs e)
        {
            panel_settings.Visible = true;
        }

        private void pictureBox_RouteBerekenen_MouseHover_1(object sender, EventArgs e)
        {
            panel_Berekenen.Visible = true;
        }

    }
}

我只是设计界面,你可以看到这个应用程序中没有加载数据。

1 个答案:

答案 0 :(得分:0)

很难说出你的界面到底在做什么。但这里有一些一般的提示:

  • 您可以在显示启动画面(有或没有进度)的同时预加载,然后执行所有耗时的工作(例如,构建所有表单,解析所有配置,缓存图形等) )。或者甚至将主应用程序放入dll中,并使用唯一的启动画面使exe文件变小。

  • 您可以优化父/子控件重绘和布局操作(BeginUpdate / EndUpdate等),这样您就可以通过调用不必要的绘制操作来浪费时间,直到它是正确的时间因为它发生了。您可以使用双缓冲,WS_EX_COMPOSITED。

  • 如果您需要进行大量计算,那么可能必须进行虚拟化(显示“快速占位符”并在计算后用实际数据替换它们)或缓存

  • 您可以使用众多技巧之一来更快地模拟(用户可以感觉到)操作:在屏幕上显示一小部分数据,同时在内存中准备更大部分数据(某种虚拟窗口) ,添加一些智能结论和缓存(如果用户向左移动,那么也许他想继续这样,从左侧预加载更多数据,或者如果用户向右移动100像素,也许他会想要返回,所以不要卸载那些数据)。

  • 也许你必须掌握大量数据,然后优化甚至使用C ++在单独的dll中编写速度要求的部分。

  • 或许您应该重新设计UI,将常用部分拆分为控件,将嵌套内容放入用户控件等等。