Приложение C # Tray Icon с демоном - PullRequest
1 голос
/ 30 декабря 2011

Заполните новичка на 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);
    }
}

Для запуска со скрытой формой.И основной цикл приложения происходит в виде события Load:

    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 Ответ

2 голосов
/ 30 декабря 2011

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

...