1

在这里完成 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 交互。

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

谢谢!

4

1 回答 1

2

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

于 2011-12-30T16:54:34.917 回答