我作了一个小程序,在登陆窗体上点击登陆按钮,验证用户名和密码以后调出主窗体,现在我想在验证用户是否合法的同时,显示一个进度条,当进度条走完以后,主窗体再显示出来,本人刚开始学c#,肯请高手们帮帮忙,给个设计思想,有代码更好.先表示感谢了

解决方案 »

  1.   

    delegate void HandleInterfaceUpdateDelegate();  //委托,此为重点 
            HandleInterfaceUpdateDelegate interfaceUpdateHandle; 
          Thread td; 
            public formMain() 
            { 
                InitializeComponent(); 
                interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(StartPro); //实例化委托对象 
            } 
    在你进行操作的方法里第一句加上: 
    this.Invoke(interfaceUpdateHandle);//用指定的参数列表执行指定的委托 最后一行加上: 
    td.Abort(); 
    这是相关的方法。 
    private void chang() 
            { 
                ProcessBar obj = new ProcessBar();注:ProcessBar是你放置图片的窗口 
                obj.ShowDialog(); 
            }         
            public void StartPro() 
            { 
                td= new Thread(chang); 
                td.Start(); 
            } 
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;namespace ProcessBarInNewWindow
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        private FrmProcessBar myProcessBar = null;        private delegate bool IncreaseHandle(int nValue);        private IncreaseHandle myIncrease = null;        private void Form2_Load(object sender, EventArgs e)
            {
                Thread thdSub = new Thread(new ThreadStart(ThreadFun));
                
                thdSub.Start();
            }        private void ShowProcessBar()
            {            myProcessBar = new FrmProcessBar();            myIncrease = new IncreaseHandle(myProcessBar.Increase);            myProcessBar.ShowDialog();
                
                myProcessBar = null;
            }        private void ThreadFun()
            {            MethodInvoker mi = new MethodInvoker(ShowProcessBar);
                
                this.BeginInvoke(mi);            Thread.Sleep(1000);//Sleep a while to show window            bool blnIncreased = false;            object objReturn = null;            do
                {                Thread.Sleep(50);                objReturn = this.Invoke(this.myIncrease,                    new object[] { 2 });                blnIncreased = (bool)objReturn;            }            while (blnIncreased);        }
        }
    }
      

  3.   

    http://topic.csdn.net/u/20090710/13/6a4b93fc-dc7c-41c6-89ec-50a12959feb3.html 
      

  4.   

    新建一个窗口progressForm,上面绘制一个进度条就是了,新建线程创建progressForm,如果有跨线程访问控件的情况需要在progressForm里面添加如下代码
    i. 在类中见一个委托delegate void SetTextCallback();
    ii. 在新建线程访问的函数中写入如下代码
    if (this.progress.InvokeRequired)
    {
                {
                    SetTextCallback d = new SetTextCallback(startProgress);
                    this.Invoke(d, new object[] {  });
                }
                else
                {
                    progress.PCElapsedTime = 0;
                    for (int i = 0;; )
                    {
                        if(progress.value==100)
                        {
                          progress.value = 0;
                        }
                        progress.value += 1 ;
                        System.Threading.Thread.Sleep(1000);
                    }
                    this.Close();
                }
    }
    当你验证结束的时候直接终止刚才新建的线程就行了
      

  5.   

    虽然没有现成的例子,但你可以用backgroundwork的控件。这个可以很方便的让你上手。
    我就是这么做的。个人觉得,相当好用