public partial class Form1 : Form
    {
        Thread th;
        public Form1()
        {
            InitializeComponent();
        }
        private void btnRun_Click(object sender, EventArgs e)
        {
            th = new Thread(new ThreadStart(RunLoad));
            th.Start();
        }        protected void RunLoad()
        {
            long i;            ProgressBar tpb =progressBar;
            ListBox tlb = lb;            tlb.Items.Clear();            tpb.Maximum = 10000;
            tpb.Minimum = 0;
            int max = 65535;            for (i = 0; i <= max; i++)
            {
                int current = (int)(((float)i / (float)max)*10000);
                tpb.Value = current;
                //progressBar.Refresh();                tlb.Items.Add(i.ToString());
            }
        }        private void btnStop_Click(object sender, EventArgs e)
        {
            if (th != null && th.ThreadState == ThreadState.Running)
            {
                th.Abort();
            }
        }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (th != null && th.ThreadState == ThreadState.Running)
            {
                th.Abort();
            }
        }
    }progressBar是Form1的一个ProgressBar
lb是Form1的一个ListBox但是如程序所写
th线程启动RunLoad函数后RunLoad函数可以直接访问progressBar和lb,这两个空间不是属于窗体主线程的吗?为什么附线程可以直接访问?

解决方案 »

  1.   

    因为你那个thread th也是form1的,呵呵
      

  2.   

    经测试点击run之后会抛出“线程间操作无效: 从不是创建控件“lb”的线程访问它。”的InvalidOperationException。
    请LZ测试后再提问,另外确保你没有把Control.CheckForIllegalCrossThreadCalls设为false
      

  3.   

    的却调试状态下CheckForIllegalCrossThreadCalls默认为True
    运行状态下CheckForIllegalCrossThreadCalls默认为False忘说了我是在运行状态下测试的
      

  4.   

    从线程访问控件需要回调啊
    http://zwkufo.blog.163.com/blog/static/25882512009111453957552/?hasChannelAdminPriv=true
      

  5.   

    其实我认为就是进程和线程的区别,运行form会启动一个进程, 而form1和thread th是进程里的两个线程,
    form1只不过是主线程,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.不知说的对不对,请高手指正