Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 271

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 265 266 267 268 269 270 < 271 > 272 273 274 275 276 277 .. 404 >> Следующая


Класс Filestream предоставляет несколько методов, предназначенных для осуществления асинхронного доступа к файлам. Это несколько более сложный способ получения доступа к файлам, однако он обладает тем преимуществом, что вы получаете возможность выполнять какие-либо другие действия в то время, пока происходит считывание или запись файла.

Процесс считывания файла начинается с вызова метода BeginReadO, Этому методу передаются параметры аналогичные тем, которые передаются основному
Работа с файлами

581

методу Reado, плюс дополнительные параметры, необходимые для осуществления асинхронного процесса.

IAsyncReault BeginRead{byte[] array, int offset, int numByte, AsyncCallack uaerCallback, object stateObject);

Первые три параметра абсолютно идентичны параметрам метода Read(), Параметр uaerCallback — это специально создаваемый метод, с помощью которого .NET Framework возвращает приложению сообщение о том, что процедура чтения завершена. Этот параметр будет рассматриваться позднее. Поскольку этот параметр не является обязательным, то вместо него можно передавать nail, что мы и сделаем в нашем первом примере. Последний параметр — это задаваемый пользователем объект состояния, который используется совместно с методом, возвращающим сообщение, для разделения нескольких асинхронных операций. Поскольку существует возможность использовать один и тот же метод сразу для нескольких операций, то можно использовать данный параметр для передачи какой-либо строки или данных, позволяющих идентифицировать данную асинхронную операцию. Поскольку метод для возвращения сообщения нами не испольауется, вместо этого параметра также передается null.

Возвращаемый объект iAsyncResuit является абстрактным представлением процесса чтения. В нем содержится большое количество свойств и методов, которые позволяют получать информацию о состоянии процесса, а также определять, что данный процесс закончился.

Для завершения процесса чтения вызывается метод EndBead о; ему передается объект iAsyncResuit, который был возвращен методом BeginReadO. Познакомимся с тем, как все это работает, с помощью примера.

Прантинум: асинхронное считывание файлов

1. Создайте новый проект. Выберите пункт меню C# Console Application И назовите его AsyncRead.

2. Добавьте следующие строки в начало файла classl.са:

using System; using System.10; using System.Text;

3. Добавьте следующий код в метод nain(>: static void Hain(string[] arga)

bytef] byData = пей byte[1001; chart] charData ¦ new Char[100];

try

(

Filestream aFile = new FileStream('.../Clasel.cs ',FileMode,Open); aFile.Seek(D,SeekOrigin.Begin);

II Начало процедуры асинхронного чтения из файла *

System.IAsyncResuit asResult = aFile.BeginRead(byData,О,100,null,null)f

II Выполнение других действий параллельно с чтением данных while (lasfteeult.IsCompleted)

{

Console.WriteLine('Reading from file...');
5 82

Глава 20

aFile.BndRead(.- Result);

Decoder d = Encoding.ASCII.GetDecoderO ;

¦ d.GetChare(byData,0,byData.Length,charData,0];

Console. WriteLine(charData);

Console.ReadLine(); return;

)

catch[IOException e)

( .

Console. WriteLine I'An 10 exception has been thrown)*) Console. WriteLine(e.ToString{));

Console.ReadLine()j return;

)

3

I

f : GYDia v Ы g F11. Л \ у f i с Я. t а d\bl й\О A rpTicR с a cLei*e 00 И

fifccuJI 1ГМ.1 f ГОП I ¦ t г .

fioilrf j Oil f I4>n E a J.< -.

iivij Г рщ I i iU _

firjrHcifj Г гоп Fair.

рг: ...01л*/ i L'Ori Lite.

."¦ ill iii4 I'(4M i I j It: .

Ho oil i iL>:i i i*d-n k" lL$u

Re,nl Ш<] J i'on i i U. . F!-:*-iiI.iiililc* FU'rtil Nt-j fl'firi 1 Ur r Jit. и I. iny f k'Qt i fit1! r R«ai1hi.ri Fl'fl-H Jr-iiw, He a i.l ir-."1! f i‘&n I' iic . Fit- iid.ii'i.ij I lit _

HF;^ikjny fwm FtlcT Htiiil inri f i i 1 n a

Ii E- L 11' | $3(3 С-С П:;

ttn jM-j s^vtHrn.fQ: us а пц ?y= ttnrTiaxLi

li.irii;Пr. yr\ti ili-.ii.t

//> tiilnl i,'. ///

4. Запустите приложение — вы сможете увидеть, что начало файла ciassi.es будет записано в файл после нескольких строк 'Reading from file...*, как показано на рисунке слева.

Как это работает — Асинхронное считывание файлов

В данном примере происходит достаточно много интересного. Прежде всего мы запускаем процедуру считывания файла с помощью следующей строки:

System.IAsyncResult asResult = aFile.BeginRead{byData,0,100,null,null);

Это приводит К тому, ЧТО приложению возвращается объект IAsyncResult, с помощью которого можно запрашивать информацию о том, завершилась ли на данный момент процедура считывания или нет. Пока процедура не будет завершена, можно выполнять какие-либо другие действия на фоне выполняющейся процедуры считывания файла:

while (iasResult.IsCompleted)

{

Console.WriteLine)'Heading from filel');

) '

В этом примере не выполняется никаких действий, кроме простого иывода на консоль сообщения о том, что программа находится в состоянии ожидания, однако приложение может выполнять параллельно какие-нибудь гораздо более сложные действия. Однако наши возможности по-прежнему сильно ограничены, поскольку нам приходится постоянно крутиться в цикле while, ожидая завершения выполнения метода Reado. К счастью, существует другой способ — как раз здесь в дело вступают остальные параметры метода BeginHead.
Предыдущая << 1 .. 265 266 267 268 269 270 < 271 > 272 273 274 275 276 277 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.