有什么办法可以预装表格

时间:2019-08-06 06:57:30

标签: c#

我制作了一个带有初始化(窗体)的Windows窗体,该窗体随后又重定向到主窗体。问题是加载大约需要三秒钟,这使用户界面看起来真的很糟糕。按钮是白色的,直到它们加载,然后它们会显示文本和颜色。有什么方法可以预加载表单,但可以隐藏表单,直到完成初始化(表单)为止?

对于那些问为什么要花这么长时间的人,我有一个Web浏览器,它导入了本地HTML,并且具有InvokeText和addBase,addMaths和其他项目

这是加载脚本,它是如何加载Web浏览器的

    private async void TextEdit_Load(object sender, EventArgs e)
    {               
       WebClient wc = new WebClient();
       wc.Proxy = null;
       try
       {
            RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", true);
            string friendlyName = AppDomain.CurrentDomain.FriendlyName;
            bool flag2 = registryKey.GetValue(friendlyName) == null;
            if (flag2)
            {
                registryKey.SetValue(friendlyName, 11001, RegistryValueKind.DWord);
            }
            registryKey = null;
            friendlyName = null;
        }
        catch (Exception)
        {
        }
        webBrowser1.Url = new Uri(string.Format("file:///{0}/Files/TextEditor/Editor.html", Directory.GetCurrentDirectory()));

接下来的一点是网络浏览器的功能

await Task.Delay(500);
        webBrowser1.Document.InvokeScript("SetTheme", new string[]
        {
               "Dark" 

        });
        addBase();
        addMath();
        addGlobalNS();
        addGlobalV();
        addGlobalF();
        webBrowser1.Document.InvokeScript("SetText", new object[]
        {
             ""
        });



    }

我猜这是webBrowser(文本编辑器)的问题,因为当我删除它时,它不再需要3秒钟的加载时间。

对于那些说使用This.Hide();This.Show();的人来说,它不起作用,因为Web浏览器根本无法加载。

1 个答案:

答案 0 :(得分:2)

如果主要问题是it takes about three seconds to load,则考虑在表单的Load事件上使用 Threading (前提是您已将所有必备组件放置在此处)。这样,您可以首先在显示表单之前禁用控件,并在整个过程完成后启用控件。参见以下示例:

private void Form1_Load(object sender, EventArgs e)
{
    #region Disable controls here
    textbox1.Enabled = false;
    button1.Enabled = false;
    combobox1.Enabled = false;
    #endregion

    Task.Factory.StartNew(() => {
        try
        {
            // Do Long running processing of form prerequisites here.

            ...

            // Enable controls here once processing is sucessful and complete.

            Invoke((Action) (() => {
                textbox1.Enabled = true;
                button1.Enabled = true;
                combobox1.Enabled = true;        
            }));
        }
        catch(Exception e)
        {
            Invoke((Action) (() => {
                MessageBox.Show(e.Message);
            }));
        }    
    });
}