문제

다른 스레드에서 실행하려는 두 가지 기능이 있습니다 (데이터베이스가 필요하고 즉시 필요하지 않기 때문에).

기능은 다음과 같습니다.

            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);

참고로, 당신의 이름이 정말 길습니까? 더 읽기 쉬운 코드를 얻기 위해 단축 할 수 있습니까?

다른 팁

말한 것과 유사하게 - 작업이 조금 더 단순하다고 생각합니다 ( .NET 4 다음과 같이 사용할 수 있습니다 .NET 4.5):

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

시작 스레드는 비교적 비쌉니다.

스레드 풀의 스레드를 사용하는 것이 더 좋습니다.

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();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top