double arrow

Листинг 11.2. Асинхронный ввод

using System;

using System.IO;

using System.Threading;

namespace ConsoleApplication1

{

class Demo

{

public void UserInput() // диалог с пользователем

{

string s;

do

{

Console.WriteLine("Введите строку. Enter для завершения");

s = Console.ReadLine();

} while (s.Length!= 0);

}

public void OnCompletedRead(IAsyncResult ar) // 1

{

int bytes = f.EndRead(ar);

Console.WnteLine("Считано " + bytes);

}

public void AsyncRead()

{

f = new FileStream("D:\verybigfile", FileMode.Open,

FileAccess.Read.FileShare.Read.buf.Length, true); // 2

callback = new AsyncCallback(OnCompletedRead); // 3

f.BeginRead(buf, 0, buf.Length, callback, null); // 4 }

FileStream f;

byte[] buf = new byte[66666666];

AsyncCallback callback;

}

class Program

{

static void Main()

{

Demo d = new Demo();

d.AsyncRead();

d.Userlnput();

}

}

}

}

Для удобства восприятия операции чтения из файла и диалога с пользователем оформлены в отдельный класс Demo.

Метод OnCompletedRead (оператор 1) должен получать один параметр стандартно­го типа IAsyncResult, содержащий сведения о завершении операции, которые пе­редаются в метод EndRead.

файл открывается в асинхронном режиме, об этом говорит значение true по­следнего параметра конструктора (оператор 2). В операторе 3 создается экзем­пляр стандартного делегата AsyncCallback, который инициализируется методом

OnCompletedRead.

С помощью этого делегата метод OnCompletedRead передается в метод BeginRead (опе­ратор 4), который создает отдельный поток, начинает асинхронный ввод и воз­вращает управление в вызвавший поток. Обратный вызов метода OnCompletedRead происходит при завершении операции ввода. При достаточно длинном файле verybigfile можно убедиться, что приглашение к вводу в методе User Input выдается раньше, чем сообщение о завершении операции ввода из метода OnCompletedRead.

ПРИМЕЧАНИЕ

Пример, приведенный в листинге 11.2, максимально упрощен для демонстрации методов BeginRead и EndRead, поэтому в нем нет необходимых в любой программе проверок наличия файла, успешности считывания и т. д.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: