2013-03-27 9 views
0

를 호출 할 때 방법을 종료하는 방법을 내가 같은 연결 이벤트했습니다 :C 번호 : A 이벤트가

mySmppClient.evDeliver_Sm += new SmppClient.Deliver_SmEventHandler(mySmppClient_evDeliver_Sm); 

mySmppClient_evDeliver_Sm(){ 
// have some code here. 
} 

또 다른 방법은 같은 : check_outbox();

응용 프로그램은 항상 check_outbox() 방법을 확인한다.

코드가 check_outbox() 메서드로 포인터를 디버깅하는 동시에 이벤트가 발생하면 응용 프로그램이 중지됩니다. 따라서 mySmppClient_evDeliver_Sm()으로 작업하기 시작합니다.

내 질문 : 이벤트가 발생하면 check_outbox가 현재 작업을 완료 한 후 mySmppClient_evDeliver_Sm()을 호출합니다.

가능합니까? 또는 다른 방법이 있습니까? 아니면 시나리오를 동기화 할 수 있습니까?

+0

보고 할 문제와 관련된 관련 코드를 표시해주십시오. – MethodMan

+0

다음과 같은 두 줄이 있습니다. mySmppClient.evDeliver_Sm + = 새 SmppClient.Deliver_SmEventHandler (mySmppClient_evDeliver_Sm); check_outbox(); 이제는 항상 내 응용 프로그램이 이러한 메서드를 사용합니다. check_outbox는 새 항목에 대해 데이터베이스에 계속 체크인하고 find.check_outbox가 일부 데이터베이스 쿼리를 보유하고있을 때 사용자에게 SMS를 보냅니다. 문제는 이벤트가 응용 프로그램을 중지시킬 때입니다. 포인터가 mySmppClient_evDeliver_Sm() 메소드로 이동하기 때문입니다. – riad

+0

'check_outbox()'여기서 메소드는 무엇입니까? – MethodMan

답변

-1

새 스레드에서 mySmppClient_evDeliver_Sm()을 실행해야하며 원하는 경우 언제든지 중단 할 수 있습니다.

0

스레드간에 공유되는 부울 변수 (예 : KeepRunning)를 만듭니다. 메소드 내부에서 반복하고, 부울 변수를 주기적으로 점검하고, 메소드가 거 ~ 인 경우 메소드를 종료하십시오. 제어 스레드에서 메소드를 종료하려면 부울 변수를 false로 설정하십시오.

+0

부실 값을 읽을 수있는 동기화 문제가 있습니다. 나는 부울 대신에'CancellationToken'을 사용할 것을 강력히 제안합니다. 내부적으로 볼 때,이 부울을 감싸는 래퍼 이상은 아니지만 대신 사용자를 대신하여 동기화를 처리 할 것입니다. – Servy