Showing posts with label Windows Application (UI). Show all posts
Showing posts with label Windows Application (UI). Show all posts

Thursday, April 16, 2009

Load UI first and then load time consuming process in the background.

- Use BackgroundWorker component from windows component tool bar.

e.g.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
            backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
            listBox1.Items.Add("wait pls..");
        }

    

        void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            Person p = e.Argument as Person;
            Console.WriteLine(p.Name);
            e.Result = new Person("Someone else", 28);
            Thread.Sleep(5000);
        }

        void DoWait()
        {
            Thread.Sleep(5000);
            listBox1.Items.Clear();
            listBox1.Items.Add("test");

        }

        void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            listBox1.Items.Clear();
            Person developer = e.Result as Person;
            listBox1.Items.Add(developer.Name);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Person developer = new Person("a developer", 33);
            backgroundWorker1.RunWorkerAsync(developer);
        }
    }

    public class Person
    {
        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }

        private int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }


    }
}