我做了一个datagridview  dgv加载的数据很多,必须要加载,但是在加载的时候会出现 类似于卡死的状态,我想这是怎么样怎么在我加载全部完成的时候,在显示整个窗体,或者是类似于进度条之类的东西就是加载之后再显示整个窗体,各位大侠们,有好的方法没有?

解决方案 »

  1.   

    多线程实现grogressar显示进度条http://topic.csdn.net/u/20101214/12/d3e0d27b-1cf1-4770-98f8-a3c1c7298fc9.html
      

  2.   

    也可以参考我之前回复的帖子,用的是backgroundworker控件,代码都贴出来了http://topic.csdn.net/u/20101125/14/b4c70ed0-1785-4f9b-b711-843b1dceea4c.html
      

  3.   

    使用异步方法,进度条style设成marquee,只要有个视觉提示就行了
      

  4.   

            public MethodInvoker _LoadDataHandler;//这个东西是委托,你用它来指向你的查询数据的方法
            public MethodInvoker _BindDataHandler;//这个东西还是委托,你用它来指向你给表格绑定数据的方法
             在点击查询的按钮时间里面执行LoadData()
            public void LoadData()
            {
                if (_LoadDataHandler != null && _BindDataHandler != null)
                {
                    LoadData(_LoadDataHandler);                Invoke(_BindDataHandler);
                }
            }        private void LoadData(MethodInvoker loadDataHandler)
            {
                if (loadDataHandler != null)
                {
                    DlgLoading loading = new DlgLoading();//DlgLoading 是一个Form,你在这个Form里面放一个不停滚动的图片,就可以了!当然你也可以放FLASH动画都可以。
                    System.Threading.Thread th = new System.Threading.Thread(delegate() {  LoadThread(loading, loadDataHandler); });
                    th.Start();
                    loading.ShowDialog();
                }
            }        /// <summary>
            /// 后台线程
            /// </summary>
            /// <param name="arg"></param>
            /// <param name="getData"></param>
            /// <param name="bindData"></param>
            private static void LoadThread(object arg, MethodInvoker loadDataHandler)
            {
                DlgLoading loading = (DlgLoading)arg;
                MethodInvoker funcClose = loading.Close;
                Stopwatch sw = new Stopwatch();            try
                {
                    sw.Start();                //获取数据
                    loadDataHandler();                sw.Stop();
                    TimeSpan ts = sw.Elapsed;                if (ts.TotalSeconds < 0.5)
                    {
                        int iSleep = Convert.ToInt32(Math.Floor((0.5 - ts.TotalSeconds) * 1000));                    Thread.Sleep(iSleep);
                    }
                }
                catch
                { }
                finally
                {
                    //关闭loading
                    loading.Invoke(funcClose);
                }
            }        这个很好用,而且你可以吧这3个函数封装到一个类里面去,不管查询数据量的多少,都是用这些方法,又方便,又好用!好用的话请给分哦,我好穷啊没分!