public static void receive()
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("Main Thread State:" + thr.ThreadState); //IPHostEntry ipHost = Dns.Resolve("127.0.0.1");
//IPAddress ipAddr = ipHost.AddressList[0];
IPAddress ipAddr = IPAddress.Parse("192.16.10.10");
IPEndPoint endPoint = new IPEndPoint(ipAddr,5001); Socket sClient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); sClient.BeginConnect(endPoint,new AsyncCallback(ConnectCallback),sClient);
socketEvent.WaitOne();
Console.WriteLine("connect ok"); sClient.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),sClient);
socketEvent.WaitOne();
Console.WriteLine("Response receive:{0}",theResponse);
//sClient.Shutdown(SocketShutdown.Both);
//sClient.Close();
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
public static void ConnectCallback(IAsyncResult ar)
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("ConnectCallback Thread State:" + AppDomain.GetCurrentThreadId()); Socket sClient = (Socket)ar.AsyncState;
sClient.EndConnect(ar);
Console.WriteLine("Socket connected to " + sClient.RemoteEndPoint.ToString());
socketEvent.Set();
}
catch (Exception ex)
{
//string err_message = ex.Message;
//if (err_message.IndexOf("No connection could be made because the target machine actively refused it")> -1)
//{
Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff")+"||"+AppDomain.GetCurrentThreadId()+"||3--Level 3 Server connection is broken, waiting for Level 3 Server connection......");
//   Thread.Sleep(3000);
sClient= new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//   sClient.BeginConnect(EPServer, new AsyncCallback(ConnectCallback),sClient);
socketEvent.Set();
//   return;
//   Thread.CurrentThread.Abort();
//   Thread.CurrentThread.Abort();
//}
//else
//{
//   Console.WriteLine(ex.ToString());
//}
}
}public static void ReceiveCallback(IAsyncResult ar)
{
try
{
Thread thr = Thread.CurrentThread;
Console.WriteLine("ConnectCallback Thread State:" + AppDomain.GetCurrentThreadId()); Socket sClient = (Socket)ar.AsyncState; int bytesRead = sClient.EndReceive(ar);//,i=0; if (bytesRead>0)
{ theResponse = Encoding.ASCII.GetString(buffer,16, bytesRead);
Console.WriteLine(theResponse);
sClient.BeginReceive(buffer,0,buffer.Length,0,new AsyncCallback(ReceiveCallback),sClient);
}
else
{
Console.WriteLine("===============================");
// socketEvent.Set();
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}

解决方案 »

  1.   

    线程没有返回值,参见MSDN。
    使用全局变量,等方法传递数据。
      

  2.   

    封装一下线程,这样即可以传任意的参数,也可以控制线程及取得返回值之类的
    示例:
    public MyThread
    {
        public object ThreadParam = null;
        Thread workThread = null;
        object workThreadRet = nulll;
     
        public MyThread(){}
        public Start(){
             workThread = new Thread( new ThreadStart( proc ) );
             workThread.Start();
        }
        public void Abort(){
             if( workThread != null ) workThread.Abort();
        }
       
        void proc(){
            ...
            workThreadRet = ...;
        }
    }
      

  3.   

    get string sRtnMsg
     {
       retrun  this.global
      }