2013-05-01 4 views
0

백그라운드에서 실행되도록 Windows 응용 프로그램을 개발 중입니다. (장기 실행 프로세스의 경우).NotifyIcon의 ContextMenu가 때때로 작동하지 않습니다.

응용 프로그램은 NotifyIcon 도구 팁을 사용하여 프로세스 상태를 보여줍니다.

ContextMenu 컨트롤을 NotifyIcon 도구 팁 컨트롤에 추가했습니다. 응용 프로그램이 유휴 상태 일 때마다 (컨텍스트 메뉴는 정상적으로 작동하지만 프로세스 실행 중에 상황에 맞는 메뉴가 중단됩니다.

모든 프로세스가 다른 스레드에서 실행 중입니다. 누구든지 장기 실행 백그라운드 프로세스에 대한 부드러운 컨텍스트 메뉴를 만들 수있는 방법을 말해 줄 수 있습니까?

+0

프로그램이 뭔가 다른 작업을하고 있기 때문에 상당히 어려울 수 있습니다. 컨텍스트 메뉴에 대해 생각하지 않고 별도의 스레드에 상황에 맞는 메뉴를 추가 할 수 있습니까? –

답변

2

정확하게 같은 규칙은 사용자 인터페이스를 표시하기 위해 Window 또는 Form을 사용하는 프로그램으로 NotifyIcon이있는 프로그램에 적용됩니다. NotifyIcon은 프로세스의 주 스레드 인 Application.Run()을 호출 한 알림을 보냅니다. 그리고 그 메인 스레드가 "프로세스 실행"과 같은 다른 작업으로 바쁘다면 NotifyIcon은 피곤합니다. 그것은 알림을 보내려고하지만 주 스레드가 "프로세스"를 실행하는 중이므로 듣고 있지 않습니다.

일반 GUI 프로그램과 똑같은 방법으로 해결해야합니다. 작업자 스레드에서 처리 코드를 실행해야합니다. BackgroundWorker, Task 또는 async/await 키워드와 같은 표준 .NET 솔루션을 사용하십시오. 또는 Thread 또는 ThreadPool을 사용하여 자신의 스핀을 돌려보십시오.

이 작업을 이미 수행 한 경우 질문에서 명확하지 않지만 ReportProgress를 너무 자주 호출하고 여전히 주 스레드가 멈추는 BackgroundWorker를 조심하십시오.

관련 문제