2008-11-12 2 views
5

웹 서비스를 "폴링"하여 사용자가 새로운 메시지를 기다리고 있는지 확인해야하는 응용 프로그램이 있습니다. 나는 "밀어 넣기"메커니즘으로 전환 할 수 없기 때문에 webservice에 대한 제어권을 가지고 있지 않다. 사용 가능한 것을보기 위해 매 X 초마다 요청을하고있다.Compact Framework - System.Threading.Timer는 사용자가 화면을 끌 때 중지합니다.

System.Threading.Timer를 사용하여 모든 요청을 너무 자주하지만 몇 가지 문제가 발생했습니다. 가장 큰 점은 전화가 "대기"모드 (화면이 꺼지지 만 여전히 전화와 이메일/문자 알림을받을 수 있음)로 전송 될 때 실행이 중지된다는 것입니다.

저는 다른 배경 응용 프로그램처럼 작동하는 것이 좋습니다. 배터리를 너무 많이 소모하지 않고도 작동되게하려면 어떻게해야합니까?

답변

4

내 질문에 싫어하지만, 기기가 잠 들어있을 때에도 수행 할 수있는 this을 지적했습니다. 완벽하게 작동하는 것처럼 보입니다.

+2

자신 만의 질문에 대답하는 것은 좋은 일입니다. 그리고 당신이 찾은 해결책은 아주 좋은 것입니다 (비록 편향 될 수 있습니다). – ctacke

+0

Google 검색에서이 문제가 발생했습니다. LIT에 대한 링크는 내가 필요로했던 것입니다. 감사합니다! – CodingWithSpike

1

AFAIK 할 수 있는게 아무것도 없습니다. 대기 모드는 전력을 절약하기 위해 프로세서를 일시 중지하기위한 것이며 프로세서가 실행 중이 아니면 코드를 실행할 수있는 방법이 없습니다. 장치가 대기 모드로 들어가는 것을 막기 위해 응용 프로그램이 할 수있는 일이 있지만 이것은 전혀 권장하지 않습니다.

+0

그러면 ActiveSync는 어떻게 작동합니까? 이메일을 꺼서 주머니에 넣으면 이메일을 어떻게받을 수 있습니까? –

+0

좋은 질문입니다. 나는 실제로 프로세서가 대기 모드에서 완전히 종료되지 않았으며 ActiveSync 또는 핸드폰 또는 무선 "카드"로 원격으로 되돌릴 수 있다고 생각합니다. 대기 모드에서 실행되고 있지 않으므로 코드가 아닙니다. – MusiGenesis

1

예프. MusiGenesis가 대답 한 방식과 비슷하게 장치를 가동하지 않고는 많은 일을 할 수 없습니다. 일부 휴대폰에서 "Game/App Running"을 알리는 것과 비슷하게 배터리가 누설되는 것과 유사합니다.

휴대 전화에서 문자 메시지 (여전히 작동)를 활용하고 문자 메시지를 웹 서비스에 보내도록 인터페이스를 작성하는 것은 어떻습니까? 그게 가능할까요? 나는 그런 종류의 방법이 또한 멈추는 것을 추측하고있다. 그러나 나는 생각한다라고 생각한다?

1

컴팩트 프레임 워크에 대해서는 잘 모르겠지만 Win32에는 대기 모드에서 컴퓨터를 깨울 수있는 WaitableTimer가 있습니다. .Net에는 래퍼가 없기 때문에 일부 기본 호출이 필요합니다.

+0

PInvoke는 매우 쉽습니다. 이것은 좋은 생각입니다. – MusiGenesis

+0

나는 이것을 시험해보고 효과가 있는지 살펴볼 것입니다. – MusiGenesis

+0

CE에 WaitableTimer가 없습니다 – ctacke

0

웹 서비스를 수정할 수는 없지만 클라이언트와 원본 웹 서비스 사이에 두 번째 "섀도우"웹 서비스를 추가 할 수 있습니다. 섀도우 웹 서비스는 원래 웹 서비스를 폴링 한 다음 PDA에 알려주는 모든 것을 "푸시"할 수 있습니다.

그래도 여전히 같은 문제가 있다고 생각합니다. 필자는 웹 서비스에서 "푸시 (push)"를 한 번도 해보지 않았지만 클라이언트가 클라이언트의 메서드에 대한 위임을받는 webservice 메서드에 대한 초기 호출을 만들어서 기본적으로 구현되었다고 생각합니다. 그러면 웹 서비스가 중단됩니다. 웹 서비스가 뭔가를 푸시해야 할 때, 델리게이트를 호출합니다. 그 동안 클라이언트가 대기 모드로 전환되면 서버에서 대리인을 호출하려는 시도가 실패합니다.

관련 문제