Question

J'ai deux fonctions que je veux exécuter sur différents threads (car ce sont des bases de données, et elles ne sont pas nécessaires immédiatement).

Les fonctions sont les suivantes:

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

En javascript, je sais que je peux créer assez facilement une fonction anonyme et l'appeler facilement sur un nouveau fil avec quelque chose comme ceci:

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

Y a-t-il quelque chose comme ça en C #?

Était-ce utile?

La solution

Je crains que votre question ne soit pas très claire. Vous pouvez facilement démarrer un nouveau fil avec du code, en utilisant des méthodes anonymes en C # 2 et des expressions lambda en C # 3:

Méthode anonyme:

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

Expression Lambda:

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

Vous pouvez utiliser le même type de syntaxe pour Control.Invoke , mais c'est un peu plus délicat car cela peut prendre n'importe quel délégué - vous devez donc indiquer au compilateur quel type vous utilisez plutôt que de compter sur une conversion implicite. Il est probablement plus facile d'écrire:

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

ou

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

En note de bas de page, vos noms sont-ils vraiment longs? Pouvez-vous les raccourcir pour obtenir un code plus lisible?

Autres conseils

Semblable à ce qui a été dit - les tâches sont un peu plus simples (prises en charge à partir de .net 4 et peut être utilisé comme suit à partir de . net 4.5 ):

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

Le démarrage des discussions est relativement coûteux.

Vous feriez mieux d'utiliser un thread du pool de threads:

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

Vous pouvez utiliser une méthode anonyme:


void Foo()
{
    Thread myThread = new System.Threading.Thread(delegate(){
              //Your code here
     });
    myThread.Start();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top