스레드 사이의 조작이 잘못되었습니다. 컨트롤을 만드는 스레드가 아닌 스레드에서 접근합니다.

10042 단어 라인
        
1.         Control.CheckForIllegalCrossThreadCalls =false;
2.  Invoke     。
 
     。net2.0           ,        。  Control.CheckForIllegalCrossThreadCalls =false;      ,     true。
                    1   。                  2
 
  2  

                    Invoke(new MethodInvoker(delegate()
                    {
                         //do something...                    }));

 
           ,       :       :        richTextBox1      。  windows           ,               ,             ,         。           :

1.    load  CheckForIllegalCrossThreadCalls         false 。            ,                  。         。

2.             。                          ,         ,                  ,                         。

[c-sharp] view plaincopy
private delegate void richTextBoxCallBack();  
       //        
  
       public void server()  
       {  
           richTextBoxCallBack callback = delegate()//      
           {  
               string ip = getIP();//  ip    
               try  
               {  
                   //  txt        
                   StreamReader smReader = new StreamReader(path, System.Text.Encoding.UTF8);//        
                   string line;  
                   while ((line = smReader.ReadLine()) != null)  
                   {  
                       //string[] arrStr = line.Split('|');     //    “|”        
                       port = Int32.Parse(line.Trim().ToString());  
                       //  MessageBox.Show(port.ToString());  
                   }  
                   smReader.Close();  
                   smReader.Dispose();  
                   IPAddress ipAddress = IPAddress.Parse(ip);  
                   //           
                   listener = new TcpListener(ipAddress, port);  
                   //           
                   listener.Start(13);  
  
                   //         
                   this.richTextBox1.AppendText("Socket       ,    IP" +  
                       ip + "" + port + "/n");     //               ???  
                   //        ,    this.StartSocketListen,  
                   //                   Socket       
                   SocketServiceFlag = true;//      
                   Thread thread = new Thread(new ThreadStart(this.StartSocketListen));  
                   thread.Start();  
                   this.button1.Enabled = false;  
                   this.button2.Enabled = true;  
               }  
               catch (Exception ex)  
               {  
                   MessageBox.Show("       !!" + ex.Message);  
               }  
           };  
           richTextBox1.Invoke(callback);  
              
       }  

       private delegate void richTextBoxCallBack(); 

       richTextBoxCallBack callback = delegate(){}; //    ,            callback ,{}               ,  richTextBox1.Invoke(callback);          

 
       :        “”      。
  2003    ,          ,       05~
05        ,       ~~

  :
Control.CheckForIllegalCrossThreadCalls = false;

            ,OK,      ~
     ~

  :
   , 05 ,       InvokeRequired   ~
       true,     Invoke   ,   ~

 
//     
private delegate string returnStrDelegate();

//           ~
private string returnSchool()
        {
            return CB_School.SelectedValue.ToString();
        }

//         Invoke ~,       ~
private string returnCB(returnStrDelegate myDelegate)
        {
            if (this.InvokeRequired)
            {
                return (string)this.Invoke(myDelegate);
            }
            else
            {
                return myDelegate();
            }
        }

//         ~
string _school = returnCB(returnSchool);

       ,              ,         ~~

좋은 웹페이지 즐겨찾기