以法为为例:
public static ManualResetEvent ConnectDone = new ManualResetEvent(false);
public static void ConnectCallback(IAsyncResult ar)
{
Socket sClient = (Socket)ar.AsyncState;
sClient.EndConnect(ар);
Console.WriteLine("Сокет подключен к {0}", sClient.RemoteEndPoint.ToString());
ConnectDone.Set();
}
public static void Main(string[] arg)
{
try
{
IPHostEntry ipHost = Dns.Resolve("127.0.0.1");
IP-адрес ipAddr = ipHost.AddressList[0];
IPEndPoint endPoint = новый IPEndPoint (ipAddr, 11000);
Socket sClient = новый сокет (AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
sClient.BeginConnect(endPoint, новый AsyncCallback(ConnectCallback),
sClient);
for (int i = 0; i <5; i++)
Console.WriteLine("Выполните другую работу.");
byte[] byteData = Encoding.ASCII.GetBytes("Некоторые данные.");
ConnectDone.WaitOne();
sClient.BeginSend(byteData, 0, byteData.Length, 0,
новый AsyncCallback(SendCallback), sClient);
………
}
(注:ManualResetEvent)
Для этого можно использовать функцию ManualResetEvent. Методы: Reset(), Set(), WaitOne().初始化以后,该对象将保持原来的状态不变直到它Функция Reset() может использоваться в Set(), функция Reset() может использоваться в функции Reset(), функция Set() — функция Set(), функция WaitOne(). Для этого можно использовать функцию ManualResetEvent, которая может быть отключена вручную.信号状态,此时该线程将被激活。)
Функция ConnectDone.WaitOne(); Функция ConnectDone.WaitOne(); Функция ConnectDone.Set() позволяет использовать метод ConnectDone.Set() в режиме реального времени.了ManualResetEvent.WaitOne() может выполняться только в том случае, если вы хотите, чтобы это произошло, когда вы используете функцию ManualResetEvent.WaitOne().边的工作。
同步与异步:
简单地说,同步即程序执行一个方法,等该方法返回之后,继续往下走,
异步:即程序调用一个方法后立即返回, «宏观»而言,主线程与方法线程并行执行
Для (int i = 0; i < 5; i++)
Console.WriteLine
("Сделайте еще что-
нибудь
Работа.");
byte[] byteData = Encoding.ASCII.GetBytes("Некоторые данные.");
如果调用的是同步方法,那么,输出"Сокет, подключенный к..."一定会在"Выполните другую работу".之前,因为主线程必须等待同步方法的返回,但是在异步的情况下,将可能在5行 «Сделай другую работу».输出(实际情况还依赖于操作系统的线程
Функция sClient.BeginSend(…) позволяет использовать ConnectDone.WaitOne(),функция ConnectCallback
используется для вызова функции ConnectCallback.成,须得同步一下。