我写了个程序用于从数据库中读取数据。想弄个进度来表示进度。看了MSDN和google了一下都没有能找到合适的。我想是不是写这样的进度条要注意:
1、需要用到多线程吗?
2、需要用到委托吗?谢谢各位大虾,如果你有好的思想来分享一下嘛~

解决方案 »

  1.   

    从数据库中读取数据可能会很长时间,而这时没有办法通过Application.DoEvent()来响应其它操作,所以你要用开始一个异步操作来达到响应其它操作而可以显示一个进度条,参见下面的代码:private delegate object someMethodDelegate(object someArg);//运行时间较长的函数
    private object someLongtimeMethod(object someArg)
    {
    //执行较长的操作
    return someArg;
    }private void button1_Click(object sender, EventArgs e)
    {
    //为调用函数而声明委托的实例
    someMethodDelegate sd = new someMethodDelegate(this.someLongtimeMethod);
    //开始调用函数,可以带参数
    IAsyncResult ir = sd.BeginInvoke("测试参数", null, null);
    //显示等待的窗口
    Form fWait = new Form();
    fWait.StartPosition = FormStartPosition.Manual;
    fWait.Location = this.button1.Location;
    fWait.Show(this);
    //刷新这个等待的窗口
    Application.DoEvents();
    //循环检测是否完成了异步的操作
    while (true)
    {
    if (ir.IsCompleted)
    {
    //完成了操作则关闭窗口
    fWait.Close();
    break;
    }
    }
    //取函数的返回值
    object retValue = sd.EndInvoke(ir);
    System.Console.WriteLine(retValue);
    }