C# 在windows服务中运行线程时出现错误1607

C# 在windows服务中运行线程时出现错误1607,c#,multithreading,service,process,threadpool,C#,Multithreading,Service,Process,Threadpool,因此,我试图在windows服务中创建一个线程,但在尝试执行它时遇到了一个错误1607。 这是我的密码 protected override void OnStart(string[] args) { string path = AppDomain.CurrentDomain.BaseDirectory + "Log.txt"; using (sw = File.AppendText(path)) { sw.W

因此,我试图在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需要快速返回,您应该启动一个线程来处理您的逻辑。 一旦OnStart结束,状态将变为“running”,因此这与您的观察结果一致

至于进程在不同线程上运行时结束的原因-
我认为不管是在桌面上,服务器都会关闭,这是停止服务的正确方式。根据您上面的解释,我怀疑一旦所有客户端离开,它就会关闭(Environment.Exit或类似功能)。

我认为您的问题的答案如下所示:

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

至于进程在不同线程上运行时结束的原因-
我认为不管是在桌面上,服务器都会关闭,这是停止服务的正确方式。根据您上面的解释,我怀疑一旦所有客户端离开,它就会关闭(Environment.Exit或类似功能)。

您的
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();
    }
您构造一个
服务器
对象,向其传递对您创建的文件的引用(即
sw
)。但是,然后启动线程并使用块退出
,这将处理文件

在稍后的某个时刻,
服务器
对象试图写入该文件,但它已被释放。因此服务器在线程中抛出一个异常,该异常向主程序冒泡,并使其崩溃


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

上关闭它。您的
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();
    }
您构造一个
服务器
对象,向其传递对您创建的文件的引用(即
sw
)。但是,然后启动线程并使用
块退出
,这将处理文件

在稍后的某个时刻,
服务器
对象试图写入该文件,但它已被释放。因此服务器在线程中抛出一个异常,该异常向主程序冒泡,并使其崩溃


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

上关闭它。在第二个示例中,服务不会更改为“Running”,因为您不是从
OnStart
返回的。上的教程明确指出,
OnStart
应该设置一些东西(例如线程或计时器),以便服务可以异步监视,然后返回。至于1607错误,你从哪里得到的?关于安装?启动时?您是否已搜索以发现错误1607?在第二个示例中,服务不会更改为“正在运行”,因为您没有从
OnStart
返回。上的教程明确指出,
OnStart
应该设置一些东西(例如线程或计时器),以便服务可以异步监视,然后返回。至于1607错误,你从哪里得到的?关于安装?启动时?你搜索过1607错误是什么吗?嗨,吉姆,非常感谢你的帮助。你是对的,我正试图访问一些已经处理的东西。我删除了using语句,它成功了。没有更多错误:)@Shey:如果这篇文章解决了你的问题,请点击复选标记,使其成为可接受的答案。嗨,吉姆,非常感谢你的帮助。你是对的,我正试图访问一些已经处理的东西。我删除了using语句,它成功了。没有更多错误:)@Shey:如果这篇文章解决了你的问题,请点击复选标记,使其成为可接受的答案。嘿,萨沙,谢谢你的帮助。问题解决了。“using”语句基本上用于处理块外的内容。我试图访问线程中已被处理的内容。所以,我所做的只是删除“使用”块来解决这个问题。它成功了。非常感谢你的帮助和其他人的帮助。谢谢:)嘿,萨沙,谢谢你的帮助。问题解决了。“using”语句基本上用于处理块外的内容。我试图访问线程中已被处理的内容。所以,我所做的只是删除“使用”块来解决这个问题。它成功了。非常感谢你的帮助和其他人的帮助。谢谢:)