Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带守护进程的C#托盘图标应用程序_C#_Multithreading_Tray_Systray - Fatal编程技术网

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

带守护进程的C#托盘图标应用程序,c#,multithreading,tray,systray,C#,Multithreading,Tray,Systray,我是个十足的菜鸟,所以饶了我吧 我有这个应用程序,将生活在托盘上。单击托盘时,我希望访问“设置”窗体。这是所有编码和工作 但是,该应用程序的主要功能是连接到node.js中编写的应用程序,并不断轮询要做的事情 这也是编码和工作,但有一个(可怕的)警告 主类执行以下操作: static class Program { /// <summary> /// The main entry point for the application. /// </summ

我是个十足的菜鸟,所以饶了我吧

我有这个应用程序,将生活在托盘上。单击托盘时,我希望访问“设置”窗体。这是所有编码和工作

但是,该应用程序的主要功能是连接到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);
    }
}
不用说,这个应用程序可以工作,但是托盘图标什么也不做,因为主线程正忙于进行HTTP交互

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


谢谢

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

启动一个执行轮询的新线程。非常感谢提供的提示,我将研究这些提示。同时,任何示例都很方便。无需示例,BackgroundWorker工作得很好,谢谢!如果您试图从工作线程更新UI以使用Form.Invoke方法,请不要忘记。
    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
        }
    }