새 스레드에서 간단한 기능을 실행하는 가장 좋은 방법?
-
05-07-2019 - |
문제
다른 스레드에서 실행하려는 두 가지 기능이 있습니다 (데이터베이스가 필요하고 즉시 필요하지 않기 때문에).
기능은 다음과 같습니다.
getTenantReciept_UnitTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_Unit);
getTenantReciept_TenantNameTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_TenantName);
JavaScript에서는 익명의 기능을 만들고 다음과 같은 것을 사용하여 새 스레드에서 호출 할 수 있다는 것을 알고 있습니다.
setTimeout(new function(){doSomethingImportantInBackground();}, 500);
C#에 이와 같은 것이 있습니까?
해결책
당신의 질문은 분명하지 않습니다. 두렵습니다. C# 2의 익명 메소드와 C# 3의 Lambda 표현식을 사용하여 일부 코드로 새 스레드를 쉽게 시작할 수 있습니다.
익명 방법 :
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
,하지만 걸릴 수있는 정도는 약간 까다 롭습니다. 어느 DELEGATE- 따라서 암시 적 변환에 의존하지 않고 사용중인 유형의 컴파일러를 알려야합니다. 글을 쓰는 것이 가장 쉬운 일입니다.
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