主函数中 :Application.Run(new Form1());我在Form1_Load()函数里有大量的计算数据,用了很长时间。
运行程序后窗体很久不出现,直到Form1_Load()里的计算完成后才出现。
我想让程序一运行就出现窗体,然后用一个label显示"正在计算,请等待",等计算完成后,此Label消失,该怎么办?帮忙。

解决方案 »

  1.   

    把加载数据不要放在LOAD事件里,在Form1_Resize....事件里写,试试!
      

  2.   


    做一个now loading 的效果================12345,上山打老虎
      

  3.   

    “加载数据不要放在LOAD事件里,在Form1_Resize....事件里写"不成功啊,Form不改变大小的话是一直显示“正在计算,请等待..。”的,只有响应窗体大小改变时间才开始计算阿。楼上的 now loading效果能不能详细说明一下,谢谢阿。
      

  4.   

    楼上的 now loading效果能不能详细说明一下,谢谢阿。
    ================
    我也在找啊。...这样可以让用户感觉上好一点================12345,上山打老虎
      

  5.   

    Form1_Load()函数中
    {
       Thread thread=new Thread(new ThreadStart(Calc));
       thread.Start();
        .....
    }private void Calc()
    {
       你的计算代码
    }
      

  6.   

    用BackGroundWorker
    http://www.idesign.net/idesign/DesktopDefault.aspx?tabindex=5&tabid=11http://www.google.com/search?hl=zh-CN&newwindow=1&q=BackGroundWorker&lr=
      

  7.   

    你可以做一个
    闪屏窗口 
    像 Microsoft Visual Studio .NET 2003
    具体代码片断
    [STAThread]
    public static void Main() 
    {
    _MainForm= new MainForm();
    //主窗口传递给闪屏 窗口
    FlashScreenFrm fs = new FlashScreenFrm(_MainForm);
    //闪屏模式显示
    if (fs.ShowDialog()==DialogResult.Cancel)
    {
    System.Environment.Exit(1);
    }
    //完成后销毁
    fs.Dispose(); try
    {
    //启动主窗口
    Application.Run(_MainForm);
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.ToString());
    System.Environment.Exit(1);
    }
    finally
    {

    }
    }//闪屏窗口
    ///窗口为平板样式
    public class FlashScreenFrm : System.Windows.Forms.Form
    {
    //显示消息
    private System.Windows.Forms.Label label1;

    private System.ComponentModel.IContainer components=null;
    //时间控件
    private System.Windows.Forms.Timer timer1;
    //放置图形
    private System.Windows.Forms.PictureBox pictureBox1;
    MainForm _mForm;
    //构造1
    public FlashScreenFrm()
    {
    InitializeComponent();
    }
    //构造2
    public FlashScreenFrm(MainForm mForm):this()
    {
    //有用
    this.Tag=0;
    //保留变量
    _mForm = mForm;
    //设置消息
    label1.Text= "程序初始化";
    //启动 timer1 如果在这里写处理什么也看不到
    timer1.Enabled=true; }
    //省略部分。
    private void FlashScreenFrm_Closing(object sender
    , System.ComponentModel.CancelEventArgs e)
    {
    //防止 alt+F4
    if ((int)this.Tag==0)
    e.Cancel=true;
    } private void timer1_Tick(object sender, System.EventArgs e)
    {
    DialogResult rVar =DialogResult.Cancel; //就运行一次
    timer1.Enabled=false; this.label1.Text="程序正在加载请稍后";
    //不加这个就看不到效果
    Application.DoEvents();
    try
    {
    //调用主窗口的计算函数
    _mForm.LoadIClients();
    this.label1.Text="程序加载完成...."; Application.DoEvents();
    //不加这个最后的消息看不见
    System.Threading.Thread.Sleep(100);

    rVar =DialogResult.OK;
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.ToString());
    }
    finally
    {
    this.Tag = 1;
    this.DialogResult = rVar;
    }

    }
    }