2013-07-22 2 views
1

스레드가 어떻게 작동하는지 잘 모르겠습니다.시작, 스레드 중지

여기 내 코드입니다. 보내기 버튼을 클릭하면 :

protected void BtnSend_Click(object sender, EventArgs e) 
{ 
    Thread threadA = new Thread(SendSMS); 
    threadA.Start(); 
} 

protected void SendSMS() 
{ 
    //some validations here 
    Thread threadB = new Thread(loadingScreen); 
    threadB.Start(); 
    threadB.Join(); 
    //code that actually sends the required Mail 
    threadB.Stop(); 
    loading.Visible = false; 
} 
threadB는 기본적으로 화면에 아무것도 눌러에서 사용자를 비활성화 로딩 사업부와 사업부 (로드라고도 함)이 방법 호출

: 이제 메일을

protected void loadingScreen() 
{ 
    loading.Visible = true; 
} 

을 로드 중 화면 (div)이 보이지 않습니다. 내가 뭘 잘못하고 있니?

+1

ASP.NET에 대해 이야기하고 있습니까? – Alexander

+0

메일을 보낸 후 'Join'을 넣으십시오 - 중지하기 전에 (Join은 아무것도하지 않고 스레드가 완료 될 때까지 기다립니다). 또한 loadScreen 메소드가 혼자 호출 될 때 화면을 무한대로 차단하는지 확인하십시오. –

+0

예이 ASP.NET은 – user1986761

답변

0

실제로로드가 표시되고 빠르게 숨겨집니다. Div가 활성화되고 즉시 이메일을 보내면 Div가 다시 비활성화됩니다. 전자 메일 보내기 및 비활성화는 같은 스레드에서 발생합니다.

0

왜 threadB를 사용합니까? 당신은 threadA으로 작업을 수행 할 수 있습니다

protected void SendSMS() 

{여기

loading.Visible = false; 

//code that actually sends the required Mail 

loading.Visible = false; 

// 일부 검증} 크로스 연산 예외에 대한 경고

.

4

ASP.NET과 리치 클라이언트 응용 프로그램을 작성할 때 다시 생각해 봐야합니다. 짧게 (정말로 정말로 짧음) 웹 브라우저 (클라이언트)는 서버에 요청을 보냅니다. 서버는 요청을 처리하고 (그 부분은 코드 뒤에 있습니다) 결과를 웹 브라우저에 반환합니다.

코드 숨김에 DIV를 표시하면 작동하고 다시 숨기면 결과 만 웹 브라우저에 도착합니다.

원하는 광학 효과를 얻는 방법은 여러 가지가 있지만 먼저 ASP.NET의 수명주기에 대해 알아야합니다. 예를 들어 here을 시작하십시오.

+0

어떻게 뷰 스레드를 얻을 수 있습니까? – user1986761

+0

아니요, 스레드가 아닙니다. – Alexander

2

거대한 작업을 계산하는 동안 응답 가능한 응용 프로그램을 원한다고 생각합니다. 레이블의 텍스트와 같은 일부 UI를 변경하려면 두 스레드를 모두 동기화해야하므로 WinForms에서는주의해야합니다. (UI-Thread and Thread1) .NET 4.0을 사용하는 경우 작업 클래스를 사용해야합니다. 동기화 할 필요가 없으며 익명 메소드를 사용할 수도 있기 때문입니다.

protected void SendSMS() 
{ 
    loading.Visible = true; 

    var task = Task.Factory.StartNew(()=>{//code that actually sends the required Mail} 

    task.Wait(); 
    loading.Visible = false; 
}