C#中让窗体的LOAD中的代码执行完了,再显示整个窗体..
我有一个窗体,其中在LOAD 中有加载数据,有时候会有点慢,为了不让用户看到慢.是不是可以让用户先看到一个等待窗体A,让别一个窗体同时显示B, 等B完全显示好了,再把A.关了,显示B呢? --------------------编程问答--------------------
private void Form2_Load(object sender, EventArgs e)
{
Thread _Thread = new Thread(new ThreadStart(ShowLoginingForm));
_Thread.SetApartmentState(ApartmentState.STA);
_Thread.Start();
for (int i = 0; i != 1000000; i++)
{
for (int z = 0; z != 1000; z++)
{
}
}
_Thread.Abort();
}
public void ShowLoginingForm()
{
Form1 _Form = new Form1();
_Form.TopMost = true;
_Form.Show();
while (true)
{
Application.DoEvents();
}
} --------------------编程问答-------------------- 遇到这种比较耗时的操作,可以考虑使用异步操作。
首先,让等待画面A显示出来,并在后台实施数据加载动作;一般而言,还可以让数据加载的进度显示在等待画面上。
其次,当数据加载结束了,再启动画面B把数据显示上去。
又或者:
首先,让画面B直接显示出来。但因为数据尚未加载,所以暂时禁用整个画面。
其次,运行后台线程执行数据加载。
关于.NET异步操作,网上又好多文章,不妨搜一下 --------------------编程问答-------------------- 能不能,给介绍一下,或者示例一下 --------------------编程问答-------------------- 你原来的思路就是对的,首先把A窗口隐藏,然后开一个新线程调用B窗口,在A窗口Load函数执行完毕时,用通知B窗口关闭,并显示A窗口
下面是我一个程序的欢迎窗口大概代码 你可以参考一下
this.Hide();
//调出欢迎窗口
FontWelecome fW = new FontWelecome();
fW.ShowMainFormEvent += new UserEvents.ShowMainFormEventHandler(ShowMainFormEvent);
//调出字幕窗体,并且特效消失
Thread welcomeDlgThread = new Thread(new ThreadStart(fW.ShowWelcomeDlg));
welcomeDlgThread.Start();
然后在Load函数的最后
//通知欢迎窗体,已经加载完毕,可以关闭显示主窗体
fW.AllowFontWelComeDlgClosed(); --------------------编程问答-------------------- 两个办法:
第一,做成MDi的flash窗体,就跟PS一样,刚开始有一个窗体显示...
第二,在你的Form下都有一个InitializeComponent();方法,这个是用来初始化窗体的,你放到它之前执行就行了,C#是自上而下的设计模式.
补充:.NET技术 , C#