Pregunta

Tengo dos funciones que quiero ejecutar en subprocesos diferentes (porque son elementos de base de datos y no son necesarios de inmediato).

Las funciones son:

            getTenantReciept_UnitTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_Unit);
            getTenantReciept_TenantNameTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_TenantName);

En javascript, sé que puedo crear, crear una función anónima y llamarla en un nuevo hilo con bastante facilidad con algo como esto:

setTimeout(new function(){doSomethingImportantInBackground();}, 500);

¿Hay algo como esto en C #?

¿Fue útil?

Solución

Tu pregunta no está muy clara, me temo. Puede iniciar fácilmente un nuevo hilo con algún código, utilizando métodos anónimos en C # 2, y expresiones lambda en C # 3:

Método anónimo:

new Thread(delegate() {
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit);
}).Start();
new Thread(delegate() {
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName);
}).Start();

Expresión Lambda:

new Thread(() =>
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit)
).Start();
new Thread(() =>
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName)
).Start();

Puede usar el mismo tipo de sintaxis para Control.Invoke , pero es un poco más complicado ya que puede tomar delegado de any , por lo que debe indicarle al compilador qué tipo estás utilizando en lugar de confiar en una conversión implícita. Probablemente sea más fácil de escribir:

EventHandler eh = delegate
{
    // Code
};
control.Invoke(eh);

o

EventHandler eh = (sender, args) =>
{
    // Code
};
control.Invoke(eh);

Como nota al margen, ¿son tus nombres realmente tan largos? ¿Puedes acortarlos para obtener un código más legible?

Otros consejos

Similar a lo que se ha dicho: creo que las tareas son un poco más simples (admitidas a partir de .net 4 y se puede utilizar de la siguiente manera en . net 4.5 ):

Task mytask = Task.Run(() => 
{
    //Lines of code
});

Iniciar hilos es relativamente caro.

Puede que sea mejor usar un hilo del grupo de hilos:

ThreadPool.QueueUserWorkItem(unused =>
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit)
);
ThreadPool.QueueUserWorkItem(unused =>
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName)
);

Puede usar un método anónimo:


void Foo()
{
    Thread myThread = new System.Threading.Thread(delegate(){
              //Your code here
     });
    myThread.Start();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top