我的需求是这样的:
对文件加密很费时间,于是我另外申请了一个线程专门用于对文件的加密;
在主线程的上,有个窗体,窗体上有一个statusbar,我希望在里面动态显示一些加密文件的进度,比如:加密了几个文件了,加密已经用了多少时间了。
请问我怎么从加密文件的线程里面获取相关参数?
还有相关的问题,我怎么才能在新开的线程里面改变主线程里面的控件的一些值?

解决方案 »

  1.   

    The BackgroundWorker class allows you to run an operation on a separate, dedicated thread. Time-consuming operations like downloads and database transactions can cause your user interface (UI) to seem as though it has stopped responding while they are running. When you want a responsive UI and you are faced with long delays associated with such operations, the BackgroundWorker class provides a convenient solution.
      

  2.   


    backgroundworker 控件确实可以实现后台线程的进度显示。不过听说有bug,本人没有验证过MS楼主的这部分应该不难,完全也可以自己写。如果没有具体的量化依据,可以根据完成的步骤进行显示进度其他线程要修改主线程界面,需要通过委托:BeginInvoker
      

  3.   

    如果处理不需要很长时间的话,backgroudworder是可以用的。
    我用过,好像也没有什么明显的bug,
    使用起来比使用委托方便,特别是刚开始对委托不熟悉的话,上手快example:
     //定义
     BackgroundWorker initWorker = new BackgroundWorker();
     //设定为可以显示进度       
     initWorker.WorkerReportsProgress = true;
      //注册工作事件              
      initWorker.DoWork += new DoWorkEventHandler(initWorker_DoWork);
          将来的后台处理就放在initWorker_DoWork中实现,
      //注册进度显示事件
      initWorker.ProgressChanged += new ProgressChangedEventHandler(initWorker_ProgressChanged);
           进度显示的操作放在initWorker_ProgressChanged中
      //注册完成事件
      initWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(initWorker_RunWorkerCompleted);
          操作完成后收尾工作放在initWorker_RunWorkerCompleted中
      //启用
      initWorker.RunWorkerAsync();
    俺也是低手,多指教