目的很简单,就是线程(不是Form的成员函数)运行时会有一些状态,想把它显示在一个Form的文本框里
请问怎么做呀?
第一步先不用考虑多线程都要更新一个框的情况

解决方案 »

  1.   

    using System.Windows.Forms;
    using System.Threading;namespace Test
    {
        public partial class fmMain : Form
        {
            public fmMain()
            {
                InitializeComponent();
            }
            Thread th1;
            private void fmMain_Load(object sender, EventArgs e)
            {
                th1 = new Thread(ChangeText);
            }
            private delegate void textDel(string txt);
            private void ChangeText(object args)
            {
                //5秒后更改
                Thread.Sleep(5000);
                textDel del = delegate(string str)
                {
                    textBox1.Text = str;
                };
                textBox1.Invoke(del, new object[1] { "更改了" });
            }    }
    }
      

  2.   

    meimen2
    :看了你的话我觉得我长满了络腮胡子,满身的体毛..
      

  3.   

    我的线程不是form的成员函数呀
    请问怎么访问textBox1.text啊?
    没看懂
    能解释一下你的程序不?
      

  4.   

    你线程在哪里?一个对象中?要对form操作的话,当然得把form对象传进去,或者你那个自定义对象产生个事件,当线程计算完毕后,发送个事件,form绑定这个事件,在这个事件里更改textbox1的值
      

  5.   

    不是Form的成员函数的话这么干
    class TestClient
        {
            private Thread workThread;
            private SynchronizationContext mainThreadSynContext;
            public event EventHandler Connected;        public TestClient()//构造函数当然是主线程执行的
            {
                mainThreadSynContext = SynchronizationContext.Current;
                workThread = new Thread(new ThreadStart(DoWork));
            }        public Connect()
            {
                workThread.Start();
            }
            
            private void OnConnected(object state)//由于是主线程的同步对象Post调用,这个是在主线程中执行的
            {
                if (Connected != null)
                    Connected(this, EventArgs.Empty);
            }        private void DoWork()//这个是workThread线程执行的
            {
                //这儿做些事(连接什么的)            //这而干完了
                if (Connected != null)
                    mainThreadSynContext.Post(new SendOrPostCallback(OnConnected), null);
            }
        }    public partial class fmMain : Form 
        { 
            public fmMain() 
            { 
                InitializeComponent(); 
            }         private void fmMain_Load(object sender, EventArgs e) 
            { 
                TestClient client = new TestClient();
                client.Connected += new EventHandler(client_Connected);
            }         private void client_Connected(object sender, EventArgs e)
            {
                textBox1.Text = ...;
            }
        } 你要传什么参数,继承EventArgs增加你要的参数就行了
      

  6.   

    private delegate void ShowMessageHandler(string msg);
    private ShowMessageHandler showMsg;
    private void ShowMessageFunc(string msg)
    {
    textbox1.text=msg;
    }
    在线程中调用下面方法
    用异步调用textbox1.invoke(showMsg,new objcet[]{message});//message是线程中要显示的状态
      

  7.   

    多谢lake_cx ,我继承了EventArgs
    class myEvent: EventArgs
    {
        public string str;
    }
    修改了
    private void client_Connected(object sender, myEvent e)
    提示
    client.Connected += new EventHandler(client_Connected);
    有问题
    请问,我是不是还要继承一个EventHandler阿?
      

  8.   

        class MyEventArgs : EventArgs
        {
            public string str;
        }    delegate void MyEventHandler(object sender, MyEventArgs e);
    这样