如何在运行时间长的程序执行期间加一个提示窗体或进度条提示,否则就像死机了一样,一点击鼠标,就出现“没有响应”进度条只要会动就行,表示提示程序正在执行中。如果用线程解决,请给一个简单例子,谢谢!

解决方案 »

  1.   

    初学者可以从通用的 BackgroundWorker 学起。
      

  2.   

    backgroundworkder通过简单地将几个接口功能封装起来,初学者就可以不必动脑子自己写和设计十好几条代码了,这个简单的机制/控件可以作为一个编程模式拿来就用。
      

  3.   

    可以使用多线程+委托:using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Threading;
    namespace WindowsFormsApplication6
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        Thread drawThread = null;            
            delegate void drawDelegate(int i);        //开启子线程
            private void btnTest_Click(object sender, EventArgs e)
            {
                closeThread();            drawThread = new Thread(new ThreadStart(draw));
                drawThread.IsBackground = true;
                drawThread.Start();
            }        //draw子线程,循环调用test函数
            private void draw()
            {
                try
                {
                    for (int i = 0; i < 100000000; i++)
                    {
                        test(i);
                        Thread.Sleep(100);
                    }
                }
                catch (System.Exception e1)
                {
                    return;
                }            closeThread();
            }        //test函数,向textBox中添加数据
            private void test(int i)
            {
                if (textBox1.InvokeRequired)
                {
                    drawDelegate d = new drawDelegate(test);
                    Invoke(d, new object[] {i });              //委托调用函数
                } 
                else
                {
                    textBox1.AppendText(i.ToString()+"\r\n");
                }
            }              //结束子线程
            private void closeThread()
            {
                if (drawThread != null)
                {
                    if (drawThread.IsAlive)
                    {
                        drawThread.Abort();
                    }
                }
            }
            
            //窗体关闭时,关闭子线程
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                closeThread();
            }
        }
    }