Как передать Рабочий объект в потоковый пул используя Visual C# .NET

Переводы статьи Переводы статьи
Код статьи: 315460 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье дается пошаговое описание процесса передачи метода в потоковый пул для выполнения.

В среде .NET каждый процесс имеет потоковый пул, который Вы можете использовать для запуска методов асинхронно.

Требования

В следующем списке приводится рекомендуемое аппаратное и програмное обеспечение, сетевая инфраструктура и требуемые пакеты исправлений:
  • Visual Studio .NET
В данной статье подразумевается, что Вы знакомы со следующими темами:
  • Язык программирования Visual C#

Создание приложения на Visual C#, которое использует потоковый пул

  1. Запустите Microsoft Visual Studio .NET.
  2. Создайте новый проект Windows Visual C# с названием PoolDemo.
  3. Используйте панель инструментов для добавления элемента управления Button на форму. По умолчанию, кнопка получает имя "button1".
  4. Щелкните правой кнопкой мыши на форме и выберите View Code.
  5. Вставьте инструкцию using после существующих инструкций using, но до объявления пространства имен PoolDemo:
    using System.Threading;
    					
  6. Переключитесь обратно в Design view и дважды щелкните button1. Вставьте следующий код в обработчик события button1_Click:
    private void button1_Click(object sender, System.EventArgs e)
    {
    	WaitCallback wcb = new WaitCallback(GetSysDirSize);
    	try
    	{
    		ThreadPool.QueueUserWorkItem(wcb);
    		MessageBox.Show("Рабочий объект был поставлен в очередь");
    	}
    	catch (Exception ex)
    	{
    		MessageBox.Show("Ошибка: " + ex.Message);
    	}
    }
    					
  7. Вставьте следующий код в тело класса Form1. Метод GetSysDirSize посчитает общее количество байт которые хранятся в системной папке. GetSysDirSize вызывает другой метод с именем DirSize для выполнения вычисления.

    Примечание: Для запуска этой задачи потребуется некоторое время.
    private void GetSysDirSize(object state)
    {
    	long total_length = DirSize(Environment.SystemDirectory);
    	this.Text = total_length.ToString();
    }
    
    private long DirSize(string path)
    {
    	long sz = 0;
    	System.IO.DirectoryInfo d = new System.IO.DirectoryInfo(path);
    	
    	// Список файлов.
    	foreach(System.IO.FileInfo f in d.GetFiles())
    	{
    		sz += f.Length;
    	}
    
    	// Рекурсия в директориях.
    	foreach(System.IO.DirectoryInfo dx in d.GetDirectories())
    	{
    		sz += DirSize(dx.FullName);
    	}
    
    	return sz;
    }
    					

Тестирование примера

  1. Нажмите CTRL+F5 для запуска приложения.
  2. При появлении формы щелкните кнопку. При появлении окна сообщения Рабочий объект был поставлен в очередь нажмите OK для его закрытия и возвращения в главную форму. После короткой задержки общий размер файлов в системной папке будет показан в заголовке формы. Продолжительность задержки зависит от скорости Вашего компьютера и количества файлов в системной папке. Подсчет размера файлов происходит в потоке потокового пула.

Свойства

Код статьи: 315460 - Последний отзыв: 4 марта 2003 г. - Revision: 1.0
Информация в данной статье применима к:
  • Microsoft Visual C# .NET 2002 Standard Edition
Ключевые слова: 
kbhowto kbhowtomaster kbthread kbsample KB315460

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com