2011-12-30 3 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 взаимодействие.

Каков правильный способ выполнения основного цикла приложения вне потока пользовательского интерфейса?

Спасибо!

+1

Запустите новую тему, которая делает опрос. – driis

ответ

2

Вы можете использовать Thread.Start из пространства имен System.Threading. Но если вы хотите обновить пользовательский интерфейс из рабочего потока, этот самый простой способ сделать это - использовать BackgroudWorker из пространства имен System.ComponentModel.

+0

Большое спасибо за советы, я собираюсь исследовать их. Тем не менее, любые примеры были бы удобными. – kolrie

+0

Нет необходимости в примерах, BackgroundWorker отлично работал, спасибо! – kolrie

+1

Не забывайте, что если вы пытаетесь обновить пользовательский интерфейс из рабочего потока, используйте метод Form.Invoke. –