工作者线程给UI如何用delegate
各位大虾:   
 你们好,小弟刚用VC#不久,改写以前VC的程序,对于异步SOCKET接受到数据包之后处理发生了问题,请指教。   
 具体问题是:   
 异步接收回调函数 
 public   void   OnDataReceived(IAsyncResult   ar) 
 { 
 收到数据包。 
 应用程序处理函数   MessageProcess(byte   []);   
 }   
 public   void   MessageProcess(byte[]) 
 { 
 case   a: 
 ..... 
 break; 
 case   b: 
 ..... 
 break; 
 .....................//包括给好多窗口分发 
 } 
 但是在编译的时候提示说线程交叉,怎么解决,用delegate能解决吗?。我又没用多线程,我想应该时异步socket用了,请大侠帮助,最好给出例子,多谢多谢。   
 有位大虾回复: 
 在C#下面工作者线程给窗体传递消息可以用委托和Windows消息!	   
 我用了委托,还是提示线程交叉,难道界面的每个控件的操作都要用control.invoke()那样程序也太复杂了.   
 能告诉我这种情况下怎样用委托?   
------解决方案--------------------RouteSynchronizer routeSynchronizer = new RouteSynchronizer(tskMgr); 
 routeSynchronizer.SynchronizeComplete += new RouteSynchronizerEventHandler(RouteSynchronizer_SynchronizeComplete); 
 Thread thread = new Thread(routeSynchronizer.Synchronize); 
 thread.IsBackground = true; 
 thread.Start();   
 private void RouteSynchronizer_SynchronizeComplete(RouteSynchronizer synchronizer) 
         { 
             if (this.InvokeRequired) 
             { 
                 this.Invoke(new InvokeDelegate <RouteSynchronizer> (RouteSynchronizer_SynchronizeComplete), synchronizer); 
             } 
             else 
             { 
                   //处理 
              } 
         }     
 public delegate void RouteSynchronizerEventHandler(RouteSynchronizer synchronizer);   
 public class RouteSynchronizer 
     { 
         private TaskManager taskMgr;           
         public RouteSynchronizer(TaskManager taskMgr) 
         { 
             this.taskMgr = taskMgr; 
         }   
         private RouteSynchronizerEventHandler synchronizeComplete; 
         public event RouteSynchronizerEventHandler SynchronizeComplete 
         { 
             add { synchronizeComplete += value; } 
             remove { synchronizeComplete -= value; } 
         } 
         private void OnSynchronizeComplete() 
         { 
             if (synchronizeComplete != null) 
                 synchronizeComplete(this); 
         }   
          public void Synchronize() 
         { 
             if (!Synchronizing) 
                 return; 
             TaskManager.Route.LastSynchronize = DateTime.Now; 
             try 
             { 
                 SynchronizeRoute(taskMgr.Route); 
             } 
             catch (Exception ex) 
             { 
                 OnExceptionOccur(ex); 
                 System.Diagnostics.Debug.WriteLine(ex.Message); 
             } 
             finally 
             { 
                 OnSynchronizeComplete(); 
             } 
         } 
 }