Я очень новичок в делегатах!
У меня есть делегат AsyncCallback, который запускает метод.
Этот метод периодически записывает текст в консоль (Console.WriteLine ("FooBar"))
Этот делегат удален из моего метода Main, и мне нужно найти способ сохранить этот метод Main открытым во время работы делегата.В противном случае программа запускается, запускает делегат и снова закрывается, поэтому я использую Console.Readline.
Будет ли это работать?Сможет ли моя программа сидеть на Console.ReadLine, пока мой делегат периодически записывает текст на консоль с помощью Console.WriteLine или я идиот?Мой код ниже:
static void Main(string[] args)
{
NetworkStream myNetworkStream;
Socket socket;
IPEndPoint maxPort = new IPEndPoint(IPAddress.Parse("x.x.x.x"), xxxx);
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
socket.Connect(maxPort);
myNetworkStream = new NetworkStream(socket);
byte[] buffer = new byte[1024];
int offset = 0;
int count = 1024;
string loginString = "FOOBARR";
ASCIIEncoding encoder = new ASCIIEncoding();
myNetworkStream.BeginRead(buffer, offset, count, new AsyncCallback(OnBeginRead), myNetworkStream);
myNetworkStream.Write(encoder.GetBytes(loginString), 0, encoder.GetByteCount(loginString));
Console.ReadLine();
}
public static void OnBeginRead(IAsyncResult ar)
{
NetworkStream ns = (NetworkStream)ar.AsyncState;
int bufferSize = 2014;
byte[] received = new byte[bufferSize];
string result = String.Empty;
ns.EndRead(ar);
int read;
while (true)
{
if (ns.DataAvailable)
{
read = ns.Read(received, 0, bufferSize);
result += Encoding.ASCII.GetString(received);
received = new byte[bufferSize];
Console.WriteLine(result);
}
else
{
Thread.Sleep(1000);
}
}
}
Кроме того, если я несколько раз вызываю myNetworkStream.BeginRead с разными параметрами, будет ли каждый раз запускаться новая версия метода OnBeginRead в отдельном потоке на процессореили остановившийся метод будет заменен более новым?