2011-12-30 7 views
1

여기 C# 초보자를 완성 했으므로 다소 여유를 갖습니다.데몬과 함께 C# 트레이 아이콘 응용 프로그램

나는이 응용 프로그램을 트레이에 저장합니다. 트레이를 클릭하면 "설정"양식에 액세스하려고합니다. 이것은 모두 코드화되어 작동합니다.

그러나이 응용 프로그램의 주요 기능은 node.js로 작성된 응용 프로그램에 연결하고 수행 할 작업에 대한 폴링을 유지하는 것입니다.

또한 코드화되어 작동하지만 (끔찍한)주의 사항이 있습니다. 숨겨진 형태로 실행하려면

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Form1 form = new Form1(); 
     ApplicationContext applicationContext = new ApplicationContext(); 
     applicationContext.MainForm = form; 
     Application.Run(applicationContext); 
    } 
} 

:

주요 클래스는 않습니다. ,

private void Form1_Load(object sender, EventArgs e) 
    { 
     string basePath = Path.Combine(
      Environment.GetFolderPath(Environment.SpecialFolder.Personal), 
      "ArchSync" 
     ); 

     if (!Directory.Exists(basePath)) { 
      Directory.CreateDirectory(basePath); 
     } 

     WebClient client = new WebClient(); 
     Int64 timestamp = 0; 
     while (true) 
     { 
      // main app loop 
     } 
    } 

없이 말을이 응용 프로그램이 작동을하지만, 메인 스레드는 HTTP 상호 작용을하고 바쁜이기 때문에 트레이 아이콘, 아무것도하지 않는 : 그리고 주요 응용 프로그램 사이클은 폼로드 이벤트에서 일어나고있다.

UI 스레드 외부에서 주 응용 프로그램 루프를 실행하는 올바른 방법은 무엇입니까?

감사합니다.

+1

폴링을 수행하는 새 스레드를 시작하십시오. – driis

답변

2

System.Threading 네임 스페이스의 Thread.Start을 사용할 수 있습니다. 그러나 작업자 스레드에서 UI를 업데이트하려는 경우 가장 쉬운 방법은 System.ComponentModel 네임 스페이스의 BackgroudWorker을 사용하는 것입니다.

+0

감사합니다. 팁을 많이 보내 주셔서 감사합니다. 어떤 예도 도움이 될 것입니다. – kolrie

+0

예제가 필요 없어 BackgroundWorker가 완벽하게 작동했습니다. 감사합니다! – kolrie

+1

작업자 스레드에서 UI를 업데이트하여 Form.Invoke 메서드를 사용하려는 경우 잊지 마십시오. –

관련 문제