2013-05-22 3 views
0

VB.Net에서 사용자가 나중에 전자 메일을 보내도록 예약 할 수있는 응용 프로그램을 작성 중입니다. 응용 프로그램의 기본 폼이 닫힌 후에 백그라운드에서 실행되는 리스너 스레드를 유지하는 방법이 있습니까? 시스템을 부팅 할 때 리스너를 시작해야하지만 그 시점에 양식을 열지 않으려합니다.기본 폼을 닫은 후에 백그라운드에서 VB.NET 응용 프로그램을 실행하십시오.

예 (원하는 기능) : 오전에 응용 프로그램을 열고 3 개의 전자 메일을 예약합니다. 그 중 하나는 3 시간 이내에 보내야하고 나머지 두 개는 내일 아침에 보내야합니다. 신청서를 닫습니다. 3 시간 만에 첫 번째 메시지가 전송됩니다. 하루가 끝나면 나는 컴퓨터를 종료합니다. 내일 아침에 다시 켜면 다른 두 사람도 나없이 응용 프로그램을 열어 보냅니다.

나는 청취자를 서비스로 분리해야한다고 생각하지만, 그 길을 가기 전에 더 쉬운 방법이 없는지 확인하고 싶다.

결국 별도의 서비스와 응용 프로그램이 필요하다면 한꺼번에 설치하는 설치 프로그램을 만들 수 있습니까?

답변

4

프로젝트 옵션에서 양식 이름 대신 set the “Startup Object” to “Sub Main”이 사용됩니다. 먼저 "응용 프로그램 프레임 워크"설정을 비활성화해야 할 수 있습니다.

이제 더 이상 자동으로 이루어집니다 수동으로하기 때문에 양식을 시작해야하지만, 다른 한편으로는 당신은 지금 시작하고, 그것이 Main 방법의 끝을 (도달하면 응용 프로그램이 종료됩니다 제어 수 또는 명시 적으로 종료 될 때).

+0

나는이 해결책을 좋아한다. 그것은 내 특정 응용 프로그램에 가장 적합한 것 같지만, 어떻게'메인'방법을 써야하는지 알아내는 데 어려움을 겪고있다. Do While True Loop와 같은 루프를 사용해야한다고 가정합니다. 그러나 사용자가 일부 데이터를 입력하려고 할 때 양식이 어떻게 시작됩니까? –

+0

@ andrew.cuthbert 루프가 필요하지 않습니다. Formname.ShowDialog()를 통해 양식을 시작하십시오. -이 명령은 양식이 닫힐 때까지 대기합니다. 그 후에 당신은 전자 메일이 보내질 때까지 대기를 수행 할 수 있습니다. * 할 수있는 가장 쉬운 방법은 [응용 프로그램의 스레드를 정해진 시간 동안 잠자기 상태로 두는 것입니다.] (http://msdn.microsoft.com/en-us/library/274eh01d.aspx). –

+0

하지만 응용 프로그램이 시작될 때 양식이 시작되는 것을 원하지 않습니다. 내 리스너 스레드를 시작하고 시작한 다음 사용자가 양식을 열거 나 닫아 이메일 실행 일정을 예약 할 수있게하려고합니다. –

1

프로그램을 계속 실행하려면 TaskBar 아이콘에 대한 정의를 제공하고 아이콘 그래픽을 사용하여 응용 프로그램에서 상태를 나타낼 수 있습니다. 그것은 시스템 시계 옆의 오른쪽에 나타납니다.

그런 다음 양식이 닫히지 않고 응용 프로그램 닫기 이벤트가 해당 아이콘 메뉴에서 실행되도록 개발 프로젝트를 다시 구성해야합니다.

1

NotifyIcon 컨트롤을 사용하고 사용자가 용지함을 최소화하거나 응용 프로그램을 종료 할 것인지 묻는 질문에 OnClosing 이벤트를 캡처 할 때 Mainform을 닫습니다. 내가 여기 당신을 위해 가능한 솔루션을

NotifyIcon Control

1

: 여기

Microsoft에서 NotifyIcon 컨트롤의 문서입니다. 양식 닫기 이벤트에서 다음 코드를 입력 할 수 있습니다.

Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
    Me.Visible = False 
    e.Cancel = True 
End Sub 

이렇게하면 양식을 숨기고 컴퓨터를 종료 할 때까지 백그라운드에서 실행할 수 있습니다. 다시 시작한 다음 전자 메일을 보내려면 다시 시작한 후 액세스 할 수있는 텍스트 파일로 보낼 전자 메일을 추가하고 시작 프로그램을 추가하는 것이 좋습니다. 보다 나은 해결책은 두 개의 프로그램이있을 수 있습니다. 하나는 시작시에 있고 15 분마다 텍스트 파일을 검사하는 숨겨진 프로그램 (예 :)과 새 전자 메일이 목록에 추가 될 때 시작되는 두 번째 프로그램입니다 전송할 새 이메일을 텍스트 파일에 추가합니다.

0

(내가 잘못하면 죄송합니다. 여기에 가능한 해결책을 제시하십시오.) 일정 정보/날짜 - 시간을 보내는 전자 메일을 보관하고 알림 아이콘이있는 시작시 응용 프로그램을로드하는 간단한 db를 첨부하는 것이 좋습니다 하지만 사용자 인터페이스/양식을 표시하여 이메일 및 일정 정보/날짜 - 시간에 필요한 + BackgroundWorker를 제공하고 응용 프로그램을 절전 모드로 전환 한 다음 나중에 다시 시작하여 첫 번째 예약 된 전자 메일을 보내려면 X 시간 후). 첫 번째 전자 메일 업데이트를 보낸 후 db가 응용 프로그램을 종료합니다. 컴퓨터가 부팅되면 첫 번째 이메일을 보내기 위해 시작시 db를 확인하거나 PC가 부팅되면 절전 모드로 이동하여 첫 번째 이메일을 보냅니다. 그러나 첫 번째 전자 메일이 이미 전송 된 경우 다른 두 개의 예약 된 전자 메일 (db date-time 확인)을 보냅니다. 이 일을해야 ... :)

관련 문제