× 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

/* Multithreading */

//namespaces:

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

////Para iniciar un método en otro Thread:
////1- Creo el método, por ejemplo MiMetodo()
////2- Para llamar a ese método por ejemplo desde el evento Click() de algún botón agrego este código:
	
var hiloMiMetodo = new Thread(new ThreadStart(MiMetodo));
hiloMiMetodo.SetApartmentState(ApartmentState.MTA);
hiloMiMetodo.Start();

////Y si necesito llamar a otro método en otro Thread solo agrego otra vez el código anterior y listo, ambas cosas se harán a la vez sin lagear la ventana.
////Si necesitara que un Thread (hiloDos) espere a que el anterior (hiloUno) termine agrego la siguiente linea al anterior:

hiloUno.Join();
	
////Esto es una orden para que el evento no prosiga al siguiente Thread hasta que el actual termine.
////***PARA ACTUALIZAR LA GUI, ALGUN TEXTBOX, LABEL O AGREGA UN ITEM A UN LISTVIEW**
////Pongo estas 2 cosas
////Por ejemplo para agregar items a un ListView sería mas o menos así:

private void AddInfoToListView(object value)
{
    if (myListView.Dispatcher.Thread == Thread.CurrentThread)
    {
        if (value != null)
        myListView.Items.Add(value.ToString());
    }
    else
    {
        myListView.Dispatcher.BeginInvoke(new setValue(AddInfoToListView), new object[] { value });
    }
}

////******PARA LLAMAR A ESTE MÉTODO

AddInfoToListView("Este texto se agregará al ListView");

////******Y AGREGO ESTE DELEGADO
private delegate void setValue(object item);


////******PARA LO MISMO PERO SIN DELEGADO:
myListView.Dispatcher.Invoke(new Action(() => myListView.Items.Add("Este texto se agregará al ListView")), DispatcherPriority.Normal, null);

////*********PARA ENVIAR PARÁMETROS AL NUEVO HILO ***************

Se envían en el ".Start();"
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