本帖最后由 wj0728 于 2010-08-10 19:23:45 编辑

解决方案 »

  1.   

    独立于程序主线程的独立线程,无法直接操作窗体上的控件
    使用委托
    InvokeRequired
      

  2.   

    public delegate void AddString(string s);  
      public void Add(string s)  
      {  
      if (listBox1.InvokeRequired)  
      {  
      AddString a= new AddString(Add);  
      listBox1.Invoke(a, new object[] { s});  
      }  
      else  
      {  
      listBox1.Items.Add(s);  
      }  
      }  
      

  3.   

    如果是要绑定datagridview的数据源呢?
      

  4.   

    绑定datagridview的数据源也是不可以的将线程改为异步委托,BeginInvoke,这样也可以在监听的时候去处理其他事情还有提醒楼主while (true)这种写法是不推荐的,
    建议将true改为一变量,这样可以在其他地方随意控制监听的启动和关闭
      

  5.   

    搞定了,用委托的方法可以解决这个问题,这个while(true)就是要让线程持续监控问题解决的方法;using System;
    using System.Windows.Forms;namespace win1
    {
        public partial class Form1 : Form
        {
            public delegate void 我的委托();//声明一个委托
            public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)//此处先双击button1以便产生代码并且自动创建事件委托
            {
                new System.Threading.Thread(new System.Threading.ThreadStart (新线程)).Start();//创建一个新的线程并启动
                
            
            }
            public void 设置文字()
            {
                button1.Text = "Hello";
            }        public void 新线程()
            {
                System.Threading.Thread.Sleep(2000);//线程休眠2秒
                button1.BeginInvoke(new 我的委托(设置文字));//在button1所在线程上执行“设置文字”
                        }
        }
    }