我想从线程里往主窗体中放置的控件listBox1写入实时信息
public class MyThreadClass
        { 
            public void SendInfo()
            {
               //在此处想写下述语句,应该怎么办呢???
               //this.listBox1.Items.Add("["+DateTime.Now.ToString()+"]----开始运行");
            }
        }
在开始按键中启动线程
ThreadStart MyDelegate = new ThreadStart(MyClass.SendInfo);
MyThreadOne = new Thread(MyDelegate);
MyThreadOne.Start();我在网上查到
public Form1() 

InitializeComponent(); 
Control.CheckForIllegalCrossThreadCalls = false; 

但还是不行,请大家帮帮忙

解决方案 »

  1.   

    在线程函数中加入下面语句
    private delegate void MyInvokeInformation(string s);      //声明委托MyInvokeInformation ivInfor = new MyInvokeInformation(调用窗体中的函数);
    this.BeginInvoke(ivInfor, new object[] { 参数}); 在窗体中加入函数 public  void tt(string s)
    {
    this.listBox1.Items.Add(s); 
    }
      

  2.   

    我照您给的加上,但在线程中后两个语句还报错:
    错误 CS0038: 无法通过嵌套类型“MDSFileParsing.FormMain.MyThreadClass”来访问外部类型“MDSFileParsing.FormMain”的非静态成员
    错误 CS1061: “MDSFileParsing.FormMain.MyThreadClass”不包含“BeginInvoke”的定义,并且找不到可接受类型为“MDSFileParsing.FormMain.MyThreadClass”的第一个参数的扩展方法“BeginInvoke”(是否缺少 using 指令或程序集引用?)
      

  3.   

    delegate void UIDelegate();
            event UIDelegate UIEvent;        private void Form1_Load(object sender, EventArgs e)
            {
                UIEvent += new UIDelegate(UIFunction);
                Thread myThread = new Thread(new ThreadStart(this.ListenPort));
                myThread.Start();
            }        private void UIFunction()
            {
                listBox1.Items.Add("ip");
            }        private void ListenPort()
            {
                if (this.InvokeRequired)
                {
                    this.Invoke(UIEvent);
                }
                else
                {
                    listBox1.Items.Add("ip");                
                }
            }