我有一个进度条的类,通过子线程启动它;
 public partial class BeAppProgressBar : Form
    {
         public BeAppProgressBar()
        {
            InitializeComponent();
        }        private Thread myThread;        private void RunsOnWorkerThread()
        {
            for (int i = 0; i <= 100; i++)
            {
                for (int j = i; j <= 100; j++)
                {
                    if (j % 10 == 0)
                    {
                        ShowProgress(Convert.ToString(j) + "%", j);                        Thread.Sleep(100);
                        if (i <= 5)
                        {
                            ShowMessage("数据发送...", j);
                        }
                        else if (i <= 10 && i > 5)
                        {
                            ShowMessage("数据请求...", j);
                        }
                        else if (i > 15 && i < 20)
                        {
                            ShowMessage("数据响应...", j);
                        }
                        else
                        {
                            CloseMessage("", j);
                            if (this.myThread != null)
                            {
                                //Thread.CurrentThread.Abort();
                                Thread.CurrentThread.IsBackground = true;
                            }
                        }
                    }
                } 
            }
        }        public void ShowProgress(string msg, int percentDone)
        {
            try
            {
                if (InvokeRequired)
                {
                    System.EventArgs e = new MyProgressEvents(msg, percentDone);
                    object[] pList = { this, e };
                    BeginInvoke(new MyProgressEventsHandler(UpdateUI), pList);
                }
                else
                {
                    UpdateUI(this, new MyProgressEvents(msg, percentDone));
                }
            }
            catch
            { }
        }        public void ShowMessage(string msg, int percentDone)
        {
            try
            {
                if (InvokeRequired)
                {
                    System.EventArgs e = new MyProgressEvents(msg, percentDone);
                    object[] pList = { this, e };
                    BeginInvoke(new MyProgressEventsHandler(UpdateText), pList);
                }
                else
                {
                    UpdateUI(this, new MyProgressEvents(msg, percentDone));
                }
            }
            catch
            { }
        }        public void CloseMessage(string msg, int percentDone)
        {
            try
            {
                System.EventArgs e = new MyProgressEvents(msg, percentDone);
                object[] pList = { this, e };
                BeginInvoke(new MyProgressEventsHandler(CloseForm), pList);
            }
            catch
            { }
        }        private delegate void MyProgressEventsHandler(object sender, MyProgressEvents e);        public void CloseThread()
        {
            Thread.CurrentThread.Abort();
        }        private void UpdateText(object sender, MyProgressEvents e)
        {
            this.labelMessage.Text = e.Msg;
        }        private void CloseForm(object sender, MyProgressEvents e)
        {
            this.Close();
        }        private void UpdateUI(object sender, MyProgressEvents e)
        {
            this.labelPersent.Text = e.Msg;
            this.progressBar1.Value = e.PercentDone;        }        public class MyProgressEvents : EventArgs
        {            public string Msg;            public int PercentDone;            public MyProgressEvents(string msg, int per)
            {                Msg = msg;
                PercentDone = per;
            }
        }        private void BeAppProgressBar_Load(object sender, EventArgs e)
        {
            try
            {
                myThread = new Thread(new ThreadStart(RunsOnWorkerThread));
                myThread.Start();
            }
            catch
            { }
        }
        
    }
这个是进度条的类,通过  Thread progressBarThead = new Thread(new ThreadStart(ShowProgressBar))这个方法启动了这个进度条的类的子线程。
        private void ShowProgressBar()
        {
            BeAppProgressBar pro = new BeAppProgressBar();
            pro.ShowDialog();
            pro.Dispose();
        }然后在主线程,我应该怎么来调用progressBarThead 这个线程里面的ShowProgress()方法? 请高手指点迷津。

解决方案 »

  1.   

    最好使用 BackgroudWorker 控件。
      

  2.   

    我是这样做的,测试了下,可以弹出 进度条的那个窗体,你看看是否有参考价值: public partial class Form1 : Form
    {
    Thread progressBarThead = new Thread(ShowProgressBar); public Form1()
    {
    InitializeComponent();
    } private void button1_Click(object sender, EventArgs e)
    {
    progressBarThead.Start();
    } private static void ShowProgressBar()
    {
    BeAppProgressBar pro = new BeAppProgressBar();
    pro.ShowDialog();
    pro.Dispose();
    }
    }
      

  3.   

    这样实现不是很好,请换一种思路,.net2.0以上直接支持进度条方式,请使用BackgroundWorker类来实现,很方便。
      

  4.   

    在compact Framework里面,BackgroundWorker类是没有的