我同意这真的很令人抓狂,因为 Winform 在初始化一堆控件或填充大 DataGridView 或其他任何东西时通常看起来并不漂亮。您仍然需要存在窗口句柄才能执行此操作,从而创建已提到的所有问题。
这里有一些对我有用的东西,你有两个选择:你可以隐藏你的主窗体直到它准备好,或者你可以显示一些小闪屏让你的用户知道你正在处理它。享受。
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
Size mDeferredSize;
protected override void OnHandleCreated(EventArgs e)
{
// Capture the "real" size...
mDeferredSize = Size;
// and set it to nothing...
Size = new Size(0, 0);
DoSomeUglyInitialization(showOptionalSplash: true);
Size = mDeferredSize; // ...and now put it back to the original size
base.OnHandleCreated(e);
}
private void DoSomeUglyInitialization(bool showOptionalSplash)
{
MySplash splash = null;
if (showOptionalSplash)
{
// We have made some borderless form class with a logo or something...
splash = new MySplash();
splash.Show();
}
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
// Initialization that REQUIRES A HANDLE, e,g,
// we might be creating a bunch of controls, or
// populating a big DataGridView. Whatever it is,
// we don't want everyone looking at our biz.
System.Threading.Thread.Sleep(2500); // (Here simulated...)
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
splash?.Dispose();
}
}