Cómo enviar un elemento de trabajo para el grupo de subprocesos utilizando Visual C#

Este artículo hace referencia al siguiente espacio de nombres de biblioteca de clases de Microsoft.NET Framework:
  • System.Threading

EN ESTA TAREA

Resumen

En este artículo paso a paso se muestra cómo enviar un método para el grupo de subprocesos para su ejecución.

En el entorno .NET, cada proceso tiene un grupo de subprocesos que puede utilizar para ejecutar los métodos de forma asincrónica.

Requisitos


La lista siguiente describe el hardware recomendado, software, infraestructura de red y service packs que se necesitan:
  • Microsoft Visual Studio .NET o Microsoft Visual Studio 2005
En este artículo se supone que está familiarizado con los temas siguientes:

  • El Visual programming language C#

Crear una aplicación de Visual C# que utiliza el grupo de subprocesos

  1. Inicie Microsoft Visual Studio .NET o Microsoft Visual Studio 2005.
  2. Cree un nuevo proyecto de aplicación para Windows de Visual C# denominado PoolDemo.
  3. Utilice el cuadro de herramientas para agregar un control Button al formulario. El nombre predeterminado para el control de botón es button1.
  4. Haga clic derecho en el formulario y, a continuación, haga clic en Ver código.
  5. Después de las directivas using existente, pero antes de la declaración del espacio de nombres PoolDemo , pegue la siguiente directiva using :
    using System.Threading;
  6. Volver a la vista Diseño y, a continuación, haga doble clic en button1. Pegue el código siguiente en el controlador de eventos button1_Click :
    private void button1_Click(object sender, System.EventArgs e){
    WaitCallback wcb = new WaitCallback(GetSysDirSize);
    try
    {
    ThreadPool.QueueUserWorkItem(wcb);
    MessageBox.Show("The work item has been placed on the queue");
    }
    catch (Exception ex)
    {
    MessageBox.Show("Error: " + ex.Message);
    }
    }

  7. Pegue el código siguiente dentro del cuerpo de la clase Form1 . El método GetSysDirSize calcula el número total de bytes que se almacenan en el directorio del sistema. GetSysDirSize llama a otro método denominado DirSize para realizar el cálculo.

    Nota: esta tarea puede tardar algún tiempo en ejecutarse.
    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);

    // List files.
    foreach(System.IO.FileInfo f in d.GetFiles())
    {
    sz += f.Length;
    }

    // Recurse into directories.
    foreach(System.IO.DirectoryInfo dx in d.GetDirectories())
    {
    sz += DirSize(dx.FullName);
    }

    return sz;
    }

Probar el ejemplo

  1. Presione CTRL+F5 para ejecutar la aplicación.
  2. Cuando aparezca el formulario, haga clic en el botón. Cuando aparezca el cuadro de mensaje que del elemento de trabajo se ha colocado en la cola , haga clic en Aceptar para cerrar el cuadro de mensaje y volver al formulario principal. Transcurridos unos segundos, el tamaño total del archivo en el directorio del sistema se muestra en el título del formulario. La longitud del retraso depende de la velocidad del equipo y el número de archivos en el directorio del sistema. El cálculo de los tamaños de archivo tiene lugar en un subproceso del grupo de subprocesos.
Propiedades

Id. de artículo: 315460 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios