[winform]backgroundWorker

在进行操作的时候,程序会进入假死状态.数据少的时候还好,数据一多耗时过长很影响使用的体验,所以使用backgroundWorker类,将与数据库相关的耗时较长的操作放在Dowork事件处理程序中,进行操作的时候,用户也通过ProgressChanged和RunWorkerCompleted事件与用户界面进行通信。

  1. 从工具箱拖取backgroundWorker组件
  2. 在button的click事件加入RunWorkerAsync
        private void button3_Click(object sender, EventArgs e)
        {
            OracleConnection conn = OracleConn(PublicValue.str);
            //调用backgroundWorker1的RunWorkerAsync方法,用来引发DoWork事件
            backgroundWorker1.RunWorkerAsync(PublicValue.FilePath1);
  1. 编辑DoWork事件代码
        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            //e.Argument为RunWorkerAsync(arg);对应的参数
            BackgroundWorker bw = (BackgroundWorker)sender;
            String path = e.Argument.ToString();
            工作代码
        }
  1. 编辑ProgressChanged事件代码
  2. 编辑RunWorkerCompleted事件代码
//必须放在Form里否则无法调取
 public Form1()
        {
            InitializeComponent();
            //工作线程回调,将要执行的代码放在此函数里
            this.backgroundWorker1.DoWork += backgroundWorker1_DoWork;
            //当进度改变时回调
            this.backgroundWorker1.ProgressChanged += backgroundWorker1_ProgressChanged;
            //当完成时回调
            this.backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker1_RunWorkerCompleted);
            //此属性必须设置,否则读取不到进度
            this.backgroundWorker1.WorkerReportsProgress = true;
        }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,145评论 1 32
  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 3,543评论 1 11
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,376评论 11 349
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,046评论 2 89
  • 永远没有不可能 生活中总有一些人,对未来并不主动。 这类人,不是在动荡的日子里颠簸得太久,就是...
    大道行者_阅读 239评论 0 0