zoukankan      html  css  js  c++  java
  • c# BackgroundWorker初试

    /*
     * Created by SharpDevelop.
     * User: Administrator
     * Date: 2017/7/31
     * Time: 16:18
     * 
     * To change this template use Tools | Options | Coding | Edit Standard Headers.
     */
    using System;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Threading;
    using System.ComponentModel;
    
    namespace App
    {
        /// <summary>
        /// Description of MainForm.
        /// </summary>
        public partial class MainForm : Form
        {
            private BackgroundWorker bw;
            public MainForm()
            {
                //
                // The InitializeComponent() call is required for Windows Forms designer support.
                //
                InitializeComponent();
    
                //
                // TODO: Add constructor code after the InitializeComponent() call.
                //
            }
            void process1_Exited(object sender, EventArgs e)
            {
                // TODO: Implement process1_Exited
            }
    
            private void MainForm_Load(object sender, EventArgs e)
            {
    
            }
            void button1_Click(object sender, EventArgs e)
            {
                bw = new BackgroundWorker();
                bw.WorkerReportsProgress = true;
                bw.WorkerSupportsCancellation = true;
    
                bw.DoWork += DoWork;
                bw.RunWorkerCompleted += RunWorkerComplated;
                bw.ProgressChanged += UpdateButtonText;
                bw.RunWorkerAsync();
            }
    
            void RunWorkerComplated(object sender, RunWorkerCompletedEventArgs e)
            {
                MessageBox.Show("ok");
            }
    
            void DoWork(object sender, DoWorkEventArgs e)
            {
                for (int i = 1; i <= 100; i++)
                {
                    (sender as BackgroundWorker).ReportProgress(i);
                    label1.Text = i.ToString();
                    Thread.Sleep(100);
                }
            }
    
            void UpdateButtonText(object sender, ProgressChangedEventArgs e)
            {
    
                button2.Text = e.ProgressPercentage.ToString();
    
            }
    
        }
    }

    走过的弯路:

    1. DoWork方法中不能操纵UI控件。

    2. DoWork事件中调用ReportProgress方法,在ProgressChanged事件中可以操纵UI控件。

    3. WorkerReportsProgress属性必须设置true.   (默认是false. 因为这块,费了不少时间找原因)

  • 相关阅读:
    获取窗口句柄的几个办法
    我做的第一个网站
    学生信息管理系统
    程序题
    java冒泡排序
    模拟售票窗口,用4个线程模拟4个窗口在售票,共有8张票,用线程同步来实现
    设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1,写出程序。
    windows server 2012将计算机、回收站、文档等图标添加到桌面
    Javascript金额转化
    eclipse 每次切换工作空间都要重新配置
  • 原文地址:https://www.cnblogs.com/Jiaojiawang/p/7484624.html
Copyright © 2011-2022 走看看