场景:
  在文件上传窗口中,如果上传几千个文件,需要很长时间。我在文件上传窗口中弹出了一个进度条的模态窗口。文件上传完成后,用户才可以有其他操作。问题:
  由于长时间的上传文件,用户要求在传文件的时候可以有其他操作。由于其他操作,用户可能会关闭上传文件的窗口。请教方案:
   在传文件的时候,用户可以有其他操作,但是如果文件没有上传完,用户不能关闭上传窗口或退出应用程序。请问各位怎么实现。有其他方案更好。  模态窗口可不可以只出现在上传文件的窗口中(只对上传文件窗口有模态效果),其他窗口可以继续使用。如果有,怎么实现?

解决方案 »

  1.   

    可以做个标记,这个标记表示当前系统的运行状态,比如:正在上传文件。
    因此,不能够关闭上传窗口。
    在上传窗口的Closing事件中提示用户,要用户确定是否真的要关闭。如果不是真要关闭,则e.Cancel = true。
      

  2.   

    上传文件弹出进度条的窗口。
    用后台线程BackgroundWorker 
    private void timer1_Tick(object sender, EventArgs e) 
            { 
                if (progressBar1.Value >= 10) 
                { 
                    timer1.Enabled = false; 
                    this.Close(); 
                } 
                else 
                { 
                    progressBar1.Value += 1; 
                } 
            } 
            private void waiting_Load(object sender, EventArgs e) 
            { 
                progressBar1.Minimum = 0; 
                progressBar1.Maximum = 10; 
                progressBar1.Step = 1; 
                timer1.Enabled = true; 
                timer1.Interval = 500;
                  timer1.Tick += new EventHandler(this.timer1_Tick); 
            }
      

  3.   

    上传文件我用的是BackgroundWorker 
    在一个FTP文件类中在操作所以FTP的文件管理。1楼的全局变量可以解决。但是显示文件进度的窗口呢?模态用户还是不能有其他操作啊。,
      

  4.   

    可以考虑:
    (1)用非模态窗体(this.ShowInTaskbar = true)设计上传监控界面,随时可以切换窗口。
    (2)参考3楼代码,设计一个悬浮小窗体,显示上传进度
    (3)设计托盘图标(加上菜单)
       a.控制悬浮小窗体的显示与否
          b.控制上传任务是否中止。
       c.切换到工作界面。
    (4)主界面用MDI窗体,交互执行其他窗体的任务。如果要求不高,用非模态窗体直接搞定也很好。
      

  5.   

    是开新线程的问题
    可以用BackgroundWorker(线程安全)
    或者用Control.BeginInvoke(非线程安全)