嗯,请教了。我做了成绩的录入系统,点击提交后,系统将把成绩上传至网上,这期间有一段时间,如果用户再次点击就会重复提交,我想在中间加段程序控制,在提交的过程中,锁定原来的系统,等待提交的结果,比如出现个进度条之类的,然后等结果出来后,再解锁可以再次使用。求指点,如何做这段锁定并等待的程序,或者进度条。是用什么样的方法?进程控制吗?还是什么其它方法?

解决方案 »

  1.   

    触发事件时先直接把button的enable属性设置为false
      

  2.   

    其实不难呢,很多方法都可以。给你两种最简单的:一、创建一个等待窗口,例如这个窗体叫做Waitclass Wait : Form
    {
        private void Listen()
        {
           //一旦提交完毕就要执行这个
            this.Close();
        }
    }//Application
    void ButtonClick()
    {
        Wait w = new Wait();
        w.ShowDialog(this);//用模式对话框(很多人都这么叫)锁定主窗体
    }
    第二种就是让按钮不可用呗:private void ButtonClick()
    {
        btnClick.Enable = false;
        //然后在你的上传完毕事件内使其恢复即可
    }
      

  3.   

    提交完成后给个返回值
    你按钮点击后先判断返回值
    比如,返回0无效,不执行click事件了,直接retur了
    非0有效,执行click
      

  4.   


    貌似showDialog()这个方法的特性吧  
    用于MDI窗体模式要等这个窗体结束才能回到主窗体  只是貌似  我不太记得了 要不就又线程控制  将上传变成一个线程 等线程返回执行结束了  在让用户操作  
      

  5.   


    对,就是像showDialog()方法似的,但是想在中间把时间添加一下,另外也不能给按钮,不准取消等等。同事说用线程比较好,但我不会用,谁能讲下线程的用法?
      

  6.   

    不是非要线程吧?出现进度条是可以用线程的,可是锁定用线程就不大靠谱了。
    线程的使用方法
    //Application
    Thread newThread = new Tread(new ThreadStart(Post));
    newThread.Start();private void Post()
    {
        //你的事件
    }
    另外用ShowDialog()的话可以在那个窗体里边写事件控制,时间也可以控制。例如:
    class Wait
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        public Wait()
        {
            timer.Interval = 3000;//三秒钟后结束
             timer.Elapsed += new ..Event(Elapsed);
        }    private void Elapsed(..)
        {
            this.Close();//到了时间后关闭此窗体
        }    private void Shown(..)
        {
            timer.Start();//窗体第一次显示完成后开始计时
        }
    }//下面是执行完毕后自动关闭窗体的
    //首先假设有一个Post控件,这个控件有其Post()方法和一个State属性
    //还有一个Posted()事件class Wait
    {
        private Post ThePostControl;
        public Wait(Post postControl)
        {
            this.ThePostControl = postControl;
            postControl.Posted += new Event(Posted);
        }    private void Shown(..)
        {
            this.ThePostControl.Post();//显示完毕后开始进行传输
        }    private void Posted(..)
        {
            this.Close();//传输完毕之后关闭窗体
        }
    }