Приложение C# Tray Icon с демоном
Закончите новичка на 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 ответ
Ты можешь использовать Thread.Start
от System.Threading
Пространство имен. Но если вы хотите обновить пользовательский интерфейс из рабочего потока, самый простой способ сделать это - использовать BackgroudWorker
от System.ComponentModel
Пространство имен.