× Principio de las Subrutinas dispersas: Al depurar un programa, la accesibilidad de una rutina típica para su funcionamiento es inversamente proporcional al número de veces que dicha rutina desfila por delante de nuestros ojos al listar el programa en su búsqueda.

Código

using System;
using System.ComponentModel;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Threading;

namespace ThreadVSTaskVSBackgroundWorker
{
    /// 
    /// Lógica de interacción para MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        /// 
        /// EN ESTA CLASE SE SETEAN 3 LABELS MEDIAANTE 3 TIPOS DISTINTOS DE PROCESAMIENTO
        /// EN SEGUNDO PLANO, THREADS, TASKS Y BACKGROUNDWORKER
        /// 

        public MainWindow()
        {
            InitializeComponent();
            
            //Thread: El programador decide cuantos hilos serán y cuando lanzarlos
            Thread threadx = new Thread(() => SetThreadLabel("LABEL THREAD"));            
            threadx.Start();
            //también puede abstraerse a: 
            //Thread threadx = new Thread(() => SetThreadLabel("LABEL THREAD")).Start();

            //Task: El CLR (Common Language Runtime) decide cuantos hilos usar y cuando lanzarlos
            //Las tareas en algún momento se convierten en hilos pero el CLR se encarga de gestionarlos
            Task task = TaskFactory().StartNew(() => SetTaskLabel("LABEL TASK"));

            //BackgroundWorker
            BackgroundWorker worker = new BackgroundWorker();
            worker.DoWork += worker_DoWork;
            worker.RunWorkerAsync("LABEL BACKGROUND WORKER");
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
        }

        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            String txt = "OPERACIÓN TERMINADA";

            if (lb_backgroundWorkerCompleted.Dispatcher.Thread == Thread.CurrentThread)
            {
                if (txt != null)
                {
                    lb_backgroundWorkerCompleted.Content = txt;
                }
            }
            else
            {
                lb_backgroundWorkerCompleted.Dispatcher.BeginInvoke(new Action(() => lb_backgroundWorkerCompleted.Content = txt), DispatcherPriority.Normal, null);
            }

        }

        void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            String txt = e.Argument.ToString();

            if (lb_backgroundWorker.Dispatcher.Thread == Thread.CurrentThread)
            {
                if (txt != null)
                {
                    lb_backgroundWorker.Content = txt;
                }
            }
            else
            {
                lb_backgroundWorker.Dispatcher.BeginInvoke(new Action(() => lb_backgroundWorker.Content = txt), DispatcherPriority.Normal, null);
            }
        }

        private void SetTaskLabel(String txt)
        {
            if (lb_task.Dispatcher.Thread == Thread.CurrentThread)
            {
                if (txt != null)
                {
                    lb_task.Content = txt;
                }
            }
            else
            {
                lb_task.Dispatcher.BeginInvoke(new Action(() => lb_task.Content = txt), DispatcherPriority.Normal, null);
            }
        }

        private void SetThreadLabel(String txt)
        {
            if (lb_thread.Dispatcher.Thread == Thread.CurrentThread)
            {
                if (txt != null)
                {
                    lb_thread.Content = txt;
                }                    
            }
            else
            {
                lb_thread.Dispatcher.BeginInvoke(new Action(() => lb_thread.Content = txt), DispatcherPriority.Normal, null);
            }
        }       

    }
}
No hay información extra.
No hay video demostrativo.

DESCARGO DE RESPONSABILIDAD

LEER CON DETALLE ESTA INFORMACIÓN

Los algoritmos se ofrecen para libre uso y sin garantías de ningún tipo. Estos códigos pueden no ser los más óptimos ya que han sido recopilados a través del tiempo y pudieran existir versiones mejores, toma el contenido de esta página únicamente como una ayuda.

Volver