我正在写一个网络销售的软件.在处理远程数据库查询和网络延时的方面一直有好的解决办法!最近看到一款软件是这样解决的(Vb).它的程序在所有数据库查询的时候都弹出一个模态窗口,有个来回移动的小条(类似xp的启动界面的那个).数据库操作执行完,模态窗口自动消逝.我觉得这种方法不错,不过我自己做过很多测试,都没有成功,我觉得要用到多线程,或委托异步调用可是我就是作不出这个效果.各位帮帮忙,说说该怎么做!

解决方案 »

  1.   

    How To Create a Thread by Using Visual C# .NET
    http://support.microsoft.com/?id=815804
      

  2.   

    这种小颜色滚动条是张GIF图片,放在PictrueBox中就能实现动画效果。关于执行完成就自动消逝,一般是先show它,并设它的TopMost=true,
    执行完成后就关闭它, 如:        frmS frm = New frmS;
            frm.Show();        EXEC.....//执行方法        frm.Close();
      

  3.   

    to 3tzjq(永不言弃) 按着你的方法,有个小问题.就是frm.Show();之后,那个窗体是出来了,可是里面的图片看不到.只有方法执行完,关闭前那一瞬间可以看见.为什么?怎样才能frm.Show();之后那个窗体全能显示出来!
      

  4.   

    to  gzlucky(Lucky) 没有这个方法亚,这是什么意思?
      

  5.   

    应该是webform的吧, 我不会
    但webform的C#下我会
      

  6.   

    frm.Show();
    frm.Refresh();//刷新一下
      

  7.   

    这个最好用异步来做,可以这样,新建一个用来显示进度的窗体如frmProcess,给这个窗体添加一个属性如:
    public IAsyncResult AsyncResult
    {
    set
    {
    m_IAsyncResult=value;
    }
    }
    可以再添加一个用来检测这个m_IAsyncResult是否完成的Timer,如果m_IAsyncResult.IsCompleted为True则关闭这个窗体如下:
    private void TimerProcess_Tick(object sender, System.EventArgs e)
    {
    if (this.m_IAsyncResult!=null)
    {
    if (this.m_IAsyncResult.IsCompleted)
    {
    this.DialogResult=DialogResult.OK;
    }
    }
    }
    这样这个窗体就做好了,主要在于调用这个窗体的地方怎么来写,可以参见如下的使用:在使用以上窗体的地方先声明一个代理如:
    private delegate object TestAsyncDeleagte();在要使用的地方声明这个代理的实例如:
    //SomeClass.Method为执行时间很长的方法
    TestAsyncDeleagte logDel = new TestAsyncDeleagte(SomeClass.Method);//调用这个实例的异步执行方法BeginInvoke开始一个异步
    IAsyncResult ir = logDel.BeginInvoke(null, null);
    //使用frmProcess
    frmProcess fp = new frmProcess();
    fp.AsyncResult = ir;
    fp.ShowDialog();//显示模态窗体给用户显示出正在处理中。
    //处理完成后返回处理的结果(方法返回值)
    object objReturnValue = logDel.EndInvoke(ir);
    //到这里就完成了
    写的比较乱,不过如果细看的话是可以看出怎么来做的。当然要修改一些地方才能达到好的效果。
      

  8.   

    我也遇到这个问题,给你介绍一个很好的BusyBar,漂亮 及了.
    http://www.codeproject.com/cs/miscctrl/BusyBar.asp