繁体   English   中英

在Windows Service中运行线程时出现错误1607

[英]Error 1607 when running thread in windows service

所以我试图在Windows服务中创建一个线程,但是在尝试执行该线程时出现错误1607。 这是我的代码

  protected override void OnStart(string[] args)
    {

        string path = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
        using (sw = File.AppendText(path))
        {
            sw.WriteLine("the service has started");

           server = new Server(sw);
           server.start();
           start = true;

            new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = false;
                /* run your code here */
                while (start != true)
                {
                    Thread.Sleep(2000);
                }
                // tcp ip server
                server.started();

            }).Start();

        }
    }

当我在没有线程的情况下运行它时,OnStart程序直到服务器结束才结束。 基本上,当我右键单击该服务并启动时,服务器即启动,并且我也可以连接客户端,但是状态不会更改为“正在运行”。 当服务器代码停止执行时,它将变为正在运行。 这是上面的代码。

 protected override void OnStart(string[] args)
    {

        string path = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
        using (sw = File.AppendText(path))
        {
            sw.WriteLine("the service has started");

           server = new Server(sw);
           server.start();
           start = true;

           // running without thread
            server.started();
        }
     }

上面的代码有效,但是在右键单击并单击“开始”后,在执行完服务器代码(所有客户端都离开并且服务器关闭)之后,状态变为“正在运行”。 我真的是Windows服务的新手,所以请原谅任何愚蠢的错误。

您的OnStart方法中包含以下代码:

    using (sw = File.AppendText(path))
    {
        sw.WriteLine("the service has started");

       server = new Server(sw);
       server.start();
       start = true;

        new Thread(() =>
        {
            Thread.CurrentThread.IsBackground = false;
            /* run your code here */
            while (start != true)
            {
                Thread.Sleep(2000);
            }
            // tcp ip server
            server.started();

        }).Start();
    }

您构造一个Server对象,并将其引用传递给您创建的文件(即sw )。 但是随后您启动线程并退出using块,该代码块将处理文件。

在稍后的某个时刻, server对象尝试写入文件,但已将其丢弃。 因此,服务器在线程中引发异常,该异常冒泡到主程序,并扩展到主程序。

您需要维护对该文件的引用,并在OnStopOnStop

我认为您的问题的答案出现在这里: Windows Service持续运行

实际上,OnStart需要快速返回,您应该启动一个线程来处理您的逻辑。 一旦OnStart结束,状态将更改为“正在运行”,因此这与您的观察一致。

至于为什么进程在其他线程上运行时会结束-我认为无论OnStop为何,服务器都将关闭-这是停止服务的正确方法。 从上面的解释中,我怀疑一旦所有客户端离开,它就会关闭(Environment.Exit或类似的命令)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM