Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по C_1.docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
  1. Управление временем существования потоков.

Иногда выполнение потока необходимо приостановить. Например, поток можно использовать для отображения времени суток. Если пользователь желает убрать часы с экрана, соответствующий поток можно приостановить. Позже, когда необходимость в часах появится снова, выполнение приостановленного потока можно возобновить. В любом случае приостановить и возобновить поток — дело нехитрое. Иногда нужно и вовсе завершить выполнение потока. Завершение выполнения потока отличается от приостановки тем, что завершенный поток удаляется из системы, и его выполнение не может быть возобновлено в дальнейшем.

Часто приложение должно ожидать завершения выполнения потока. Для этого в классе Thread предусмотрен метод Join. Метод Join сообщает системе, что приложение должно ожидать завершения потока. Конечно, в таком простом примере второй поток на самом деле не нужен, так как система простаивает в ожидании его завершения. Для большей наглядности создадим пять потоков, выполняющих некоторые операции, и организуем ожидание их завершения. При работе с многопоточным кодом задача программиста несколько усложняется, так необходимо дождаться завершения всех потоков. Сделать это можно, сохранив ссылки на все потоки и вызвав для каждого из них метод Join, чтобы дождаться завершения очередного потока.

Для приостановки потока используйте метод Thread. Suspend(), а для его возобновления — метод Thread.Resume(). Форматы использования этих методов таковы:

public void Suspend()

public void Resume()

Если вызывающий поток находится не в подходящем для вызываемого метода состоянии, генерируется исключение типа ThreadStateException. Такие последствия может иметь, например, попытка возобновить поток, который не был приостановлен. Чтобы завершить поток, используйте метод Thread.Abort(). Самый простой формат его использования выглядит так:

public void Abort(). Метод Abort() генерирует исключение типа ThreadAbortException для потока, из которого этот метод вызван. Это исключение и заставляет поток завершиться. Кроме того, то же самое исключение может быть перехвачено программным кодом (с автоматической его регенерацией для завершения потока). Однако следует учитывать, что метод Abort() не всегда способен немедленно остановить выполнение потока, поэтому, если важно, чтобы поток был завершен до продолжения вашей программы, необходимо сопроводить вызов метода Abort() вызовом метода Join(). В некоторых (довольно редких) случаях метод Abort() не в состоянии завершить поток. Это возможно в ситуации, когда finally-блок включен в бесконечный цикл.

  1. Краткий обзор ado.Net. Три стороны технологии ado.Net. Пространство имен System.Data.

С развитием Интернет понадобилась модель доступа к данным, простая для работы в серверных сценариях, и позволяющая клиенту и серверу обмениваться данными. В ответ на эту потребность и появилась технология ADO. Однако этой технологии не хватало некоторых ключевых функций, необходимых для создания мощных приложений. Например, все больше и больше разработчиков хотели бы работать с XML-данными. Появилась новейшая технология доступа к данным ADO.NET, назначение которой помогать разработке эффективных многоуровневых приложений для работы с БД в интрасетях и Интернете.

Платформа .NET определяет ряд пространств имен, кото­рые позволяют непосредственно взаимодействовать с локальными и удаленными реляционными базами данных. Все вместе эти пространства имен известны как ADO.NET. ADO (ActiveX Data Objects).NET – это модель доступа к данным в приложениях .NET. Ее можно использовать для доступа как к реляционным базам данных, таким как Microsoft SQL Server, Microsoft Access, так и к другим источникам данных, для которых существуют OLEDB-провайдеры.

В отличие от классической ADO, которая была в основном предназначена для тесно связанных клиент-серверных систем, ADO.NET больше нацелена на автономную работу с помощью объектов DataSet. Эти типы представляют локальные копии любого коли­чества взаимосвязанных таблиц данных, каждая из которых содержит набор строк и столбцов. Объекты DataSet позволяют вызывающей сборке (наподобие веб-страницы или программы, выполняющейся на настольном компьютере) работать с содержимым DataSet, изменять его, не требуя подключения к источнику данных, и отправлять обратно блоки измененных данных для обработки с помо­щью соответствующего адаптера данных.

Далее, в решениях, требующих офлайнового или удаленного доступа к данным, ADO.NET использует XML для обмена данными между программами или с Web-страницами. Любой компонент, который обслуживает XML, также может использовать и компоненты ADO.NET. Если передача пакетов компонентом ADO.NET подразумевает поставку набора данных в файле XML, компонентом, способным обеспечить его получение, может быть только компонент ADO.NET. Передача данных в XML-формате даёт возможность программистам легко отделить обработку данных от компонент пользовательского интерфейса data-sharing прикладных программ, разместив их на отдельных серверах. Это может существенно повысить эффективность и надёжность многопользовательских систем.

ADO.NET обладает также хорошей масштабируемостью, что требуется для совместно использующих данные прикладных программ, работающих на основе Web. Такие Web-программы могут обслужить десятки, сотни, а то и тысячи пользователей. ADO.NET не применяет длительные блокировки баз данных или такие активные подключения, которые на долгое время монополизируют ресурсы сервера, являющимися (как правило) весьма ограниченными. Это позволяет увеличивать число пользователей без значительного увеличения утилизации ресурсов системы.

Основной недостаток ADO.NET – ограниченные возможности для работы с запросами одного из наиболее широко используемого компонента – DataSet.