新しいスレッドで単純な関数を実行する最良の方法は?
-
05-07-2019 - |
質問
異なるスレッドで実行したい2つの関数があります(これらはデータベースのものであり、すぐには必要ないためです)。
機能は次のとおりです。
getTenantReciept_UnitTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_Unit);
getTenantReciept_TenantNameTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_TenantName);
javascriptでは、匿名関数を作成して、次のような方法で新しいスレッドで簡単に呼び出すことができます。
setTimeout(new function(){doSomethingImportantInBackground();}, 500);
C#にはこのようなものがありますか?
解決
あなたの質問はあまり明確ではありません、恐れています。 C#2の匿名メソッドとC#3のラムダ式を使用して、いくつかのコードで新しいスレッドを簡単に開始できます。
匿名メソッド:
new Thread(delegate() {
getTenantReciept_UnitTableAdapter1.Fill(
rentalEaseDataSet1.GetTenantReciept_Unit);
}).Start();
new Thread(delegate() {
getTenantReciept_TenantNameTableAdapter1.Fill(
rentalEaseDataSet1.GetTenantReciept_TenantName);
}).Start();
ラムダ式:
new Thread(() =>
getTenantReciept_UnitTableAdapter1.Fill(
rentalEaseDataSet1.GetTenantReciept_Unit)
).Start();
new Thread(() =>
getTenantReciept_TenantNameTableAdapter1.Fill(
rentalEaseDataSet1.GetTenantReciept_TenantName)
).Start();
Control.Invoke
には同じ種類の構文を使用できますが、任意のデリゲートを使用できるため、少し複雑です。したがって、コンパイラーに型を伝える必要があります暗黙的な変換に依存するのではなく、使用しています。おそらく最も簡単に記述できます:
EventHandler eh = delegate
{
// Code
};
control.Invoke(eh);
または
EventHandler eh = (sender, args) =>
{
// Code
};
control.Invoke(eh);
補足として、あなたの名前は本当にそれほど長いですか?コードを読みやすくするためにそれらを短くできますか?
他のヒント
スレッドの開始は比較的高価です。
スレッドプールのスレッドを使用した方がよい場合があります。
ThreadPool.QueueUserWorkItem(unused =>
getTenantReciept_UnitTableAdapter1.Fill(
rentalEaseDataSet1.GetTenantReciept_Unit)
);
ThreadPool.QueueUserWorkItem(unused =>
getTenantReciept_TenantNameTableAdapter1.Fill(
rentalEaseDataSet1.GetTenantReciept_TenantName)
);
匿名メソッドを使用できます:
void Foo()
{
Thread myThread = new System.Threading.Thread(delegate(){
//Your code here
});
myThread.Start();
}
所属していません StackOverflow