解决方案 »

  1.   

    异步调用,BeginInvoke后showdailog等待窗体来阻塞主线程,等耗时的操作完成后,再close掉,注意下跨线程操作窗体就行了,可以用委托搞定。大致思路就这样,
    Click事件代码
    btnClick{
      OnWaitingLoginValidingHandle handle = new OnWaitingLoginValidingHandle( DoLogin );
      handle.BeginInvoke( loginCode , password , license , out message , new AsyncCallback( WaitingLoginValidingCallback ) , "" );
      WaitFlashForm.ShowFlash("正在登录,请稍后..." );//这里是自己封的一个等待窗口
    }
    private delegate bool OnWaitingLoginValidingHandle( string loginCode , string password , string license , out string message );
    private delegate void OnCloseFlashForm();
    private void CloseFlashForm(){
    具体代码略
    }
    private delegate void OnShowMessageBoxHandle(string message );
    private void ShowMessageBox(string message)
    {
        MessageBox.Show( "登录失败:" + message );
    }
    private void WaitingLoginValidingCallback( IAsyncResult result )
    {
        OnWaitingLoginValidingHandle handle = (OnWaitingLoginValidingHandle)( (System.Runtime.Remoting.Messaging.AsyncResult)result ).AsyncDelegate;
        string message = "";
        bool loginSuccessful = handle.EndInvoke( out message , result );
        if ( result.IsCompleted )
        {
            this.Invoke( new OnCloseFlashForm( CloseFlashForm ) );
            if ( !loginSuccessful )
            {
                this.Invoke( new OnShowMessageBoxHandle( ShowMessageBox ) , message );
                return;
            }
            this.DialogResult = System.Windows.Forms.DialogResult.OK;                                
        }
    }private bool DoLogin( string loginCode , string password , string license , out string message )
    {
        具体的处理代码,略
    }
      

  2.   

    http://download.csdn.net/detail/caozhy/4832657
      

  3.   

    版主的案例应该不错,以前学习过。
    提一点吧,其实简单的方法也能满足你的要求:创建一个新的窗体加载进度条,后台开始时显示新窗体,旧窗体的Enable属性设置为false,后台处理结束后关闭新窗体,恢复旧窗体的Enable属性。
    很简单吧。呵呵