带有守护进程的c#托盘图标应用程序

本文关键字:托盘图标 应用程序 进程 守护 | 更新日期: 2023-09-27 18:19:09

这是一个完整的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);
    }
}

为了在隐藏表单的情况下运行。主要的应用周期发生在form 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交互。

在UI线程外执行主应用程序循环的正确方法是什么?

谢谢!

带有守护进程的c#托盘图标应用程序

可以使用System.Threading命名空间中的Thread.Start。但是如果你想从工作线程更新UI,最简单的方法是使用System.ComponentModel命名空间中的BackgroudWorker