Frage

Ich habe zwei Funktionen, die ich auf verschiedene Threads ausgeführt werden soll (weil sie Datenbank Sachen sind, und sie sind sofort nicht erforderlich).

Die Funktionen sind:

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

In Javascript, ich weiß, ich erstellen kann eine anonyme Funktion erstellen und auf einem neuen Thread rufen ganz einfach mit etwas wie folgt aus:

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

Gibt es so etwas wie dies in C #?

War es hilfreich?

Lösung

Ihre Frage ist nicht ganz klar, ich habe Angst.

: Sie können ganz einfach einen neuen Thread mit einigem Code, mit anonymen Methoden in C # 2 und Lambda-Ausdrücke in C # 3 beginnen

Anonymous-Methode:

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

Lambda Ausdruck:

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

Sie können die gleiche Art von Syntax für Control.Invoke verwenden, aber es ist etwas schwieriger als das nehmen alle delegieren - so müssen Sie den Compiler sagen, die Sie eingeben, verwenden, anstatt auf eine verlassen implizite Konvertierung. Es ist wahrscheinlich am einfachsten zu schreiben:

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

oder

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

Als Randbemerkung, sind Ihre Namen so lange wirklich? Können Sie verkürzen sie lesbaren Code zu bekommen?

Andere Tipps

Ähnlich, was gesagt worden ist - ich Aufgaben finden etwas einfacher (unterstützt von .net 4 und kann wie folgt verwendet werden, wie der net 4,5 ).

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

Threads starten ist relativ teuer.

Sie könnte besser sein, einen Thread aus dem Threadpool verwenden:

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

Sie können eine anonyme Methode verwenden:


void Foo()
{
    Thread myThread = new System.Threading.Thread(delegate(){
              //Your code here
     });
    myThread.Start();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top