本帖最后由 selway 于 2012-08-03 18:01:31 编辑

解决方案 »

  1.   

    线程间操作UI 可以通过 Dispatcher.Invoke 相关的方法解决。
      

  2.   

    这个试试 
     public delegate void mydel(); public partial class Form1 : Form
     {
      .....   public void dele()
       {
           if (label1.InvokeRequired)//判断是否需要使用委托
            {
           
             label1.Invoke(new mydel(fun));
           }
           else
           {
             fun();
           }       
       }   ....
     } 
     
      

  3.   

    using System;
    using System.Threading;
    using System.Windows.Forms;namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            private ManualResetEvent _ManualResetEvent = new ManualResetEvent(true);        public Form1()
            {
                InitializeComponent();
            }        private Boolean _bStop = false;        delegate void mydel();        public void dele()
            {
                mydel d = new mydel(fun);
                label1.Invoke(d);
            }        public void fun()
            {
                while (!_bStop)
                {
                    label1.Invoke(new MethodInvoker(delegate()
                    {
                        int x = Convert.ToInt32(label1.Text);
                        x++;
                        label1.Text = Convert.ToString(x);
                    }));                _ManualResetEvent.WaitOne();
                }
            }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                _ManualResetEvent.Set();
                _ManualResetEvent.Close();
                _ManualResetEvent = null;
            }        private void button1_Click(object sender, EventArgs e)
            {
                _bStop = false;            Thread thread = new Thread(new ThreadStart(fun));
                label1.Text = "0";
                thread.IsBackground = true;
                thread.Start();
     
                this.Invoke(new MethodInvoker(delegate()
                {
                    button1.Enabled = false;
                    button2.Enabled = true;
                    button3.Enabled = false;
                    button4.Enabled = true;
                }));
            }        private void button2_Click(object sender, EventArgs e)
            {
                _ManualResetEvent.Reset();            this.Invoke(new MethodInvoker(delegate()
                {
                    button1.Enabled = false;
                    button2.Enabled = false;
                    button3.Enabled = true;
                    button4.Enabled = false;
                }));
            }        private void button3_Click(object sender, EventArgs e)
            {             
                _ManualResetEvent.Set();            this.Invoke(new MethodInvoker(delegate()
                {
                    button1.Enabled = false;
                    button2.Enabled = true;
                    button3.Enabled = false;
                    button4.Enabled = true;
                }));
            }        private void button4_Click(object sender, EventArgs e)
            {
                _bStop = true;            _ManualResetEvent.Set();
                _ManualResetEvent.Close();
                _ManualResetEvent = null;            this.Invoke(new MethodInvoker(delegate()
                {
                    label1.Text = "0";
                    button1.Enabled = true;
                    button2.Enabled = false;
                    button3.Enabled = false;
                    button3.Enabled = false;
                }));
            }
        }
    }Suspend和Resume已经过时了,可以不用
    Abort也不要用
      

  4.   

    可以,但是数字跑的很快,我加我原来的那个Thread.Sleep(1000);就不行了,程序未响应
      

  5.   

    教你一个简单处理跨线程访问空间方法:
    在构造函数里加上这句话CheckForIllegalCrossThreadCalls = false;
    就可以直接访问了!
    具体意思,msdn或者百度一下!
      

  6.   

    为了让问题更清晰,你可以只保留一个按钮,单击时初始化一个线程,在线程里面用Invoke修改label。
    再慢慢加上你的逻辑,看哪一步出错了。
      

  7.   

    这里                    label1.Text = Convert.ToString(x);
    c# 线程间操作无效: 从不是创建控件“”的线程访问它。
      

  8.   

    给你一个地址你好好看看人家的例子和代码:
    http://topic.csdn.net/u/20120805/01/58230777-2767-4337-a8f8-a3725e7db4b1.html