異なるスレッドで実行したい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
に対して同じ種類の構文を使用できますが、それはanyデリゲートを取ることができるので少し複雑です。したがって、使用する型に依存するのではなく、コンパイラに伝える必要があります暗黙的な変換。書くのがおそらく最も簡単でしょう:
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();
}