主要代码如下:
 MyThread my = new MyThread(this);
 thrs[i] = new Thread(new ThreadStart(TestUserLogin));
线程代码如下 
void TestUserLogin()
        {
            Thread thisThread = Thread.CurrentThread;
            try
            {
                 g_uif.UserName =   textUserName.Text.ToUpper();//无法取值
---------------------------------
小弟刚接触多线程,望各位大虾不吝赐教,感激涕零。

解决方案 »

  1.   

    textUserName
    是一个控件,对么?多线程直接访问控件的话,会报线程安全性错误。一个方法是关闭线程安全性检查(不推荐),另一个方法是用代理来访问。
      

  2.   

    表示感谢,但是能否做个最简单的例子,试试如何读取text,不要用网络上一堆堆的代码来copy。
    如:
            private delegate void AddTextUnSafe(string Text);
            public void Addtext(string text)
            {
                if (this.richTextBox1.InvokeRequired)
                {
                    AddTextUnSafe aus = new AddTextUnSafe(Addtext);
                    object obj = this.richTextBox1.BeginInvoke(aus, new string[] { text });
                }
                else
                {
                    this.richTextBox1.AppendText(text + "\n");
                }
            }
      

  3.   

    CheckForIllegalCrossThreadCalls = false;关闭线程安全性检查
      

  4.   

    通过参数传递过去,使用ParameterizedThreadStart委托。MyThread my = new MyThread(this);
    thrs[i] = new Thread(new ParameterizedThreadStart(TestUserLogin),textUserName.Text.ToUpper());
    线程代码如下
    void TestUserLogin(object state)
            {
                Thread thisThread = Thread.CurrentThread;
                try
                {
                    g_uif.UserName =  string.Format("{0}",state);
      

  5.   

    线程之间参数互掉,C#中有个方法的,具体的我忘记了,你可以上msdn上找、。
      

  6.   

    参考C# WinForm开发系列 - Thread/Delegate/Event 
      

  7.   

    其实楼主在二楼列出的方法是解决问题的最根本方法,变通一下就可以用了,就是使用代理关闭线程安全性检查是掩耳盗铃,迟早会出问题解决方法:public deleate String ReadControlTextHandle(Control control);
    public String ReadControlText(Control control)
    {
        if (this.InvokeRequired)
        {
            this.Invoke(new ReadControlTextHandle(ReadControlText), control);
        }
        else
        {
            return control.Text;
        }
    }直接调用:g_uif.UserName =  ReadControlText(textUserName);上面代码是随手写的,没测试过,楼上理解后自己测试吧