我制作了一个带有初始化(窗体)的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浏览器根本无法加载。
答案 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);
}));
}
});
}