【发布时间】:2017-12-23 04:27:51
【问题描述】:
所以我试图在 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返回。 docs.microsoft.com/en-us/dotnet/framework/windows-services/… 的教程清楚地表明OnStart应该设置一些东西(例如线程或计时器),以便服务可以异步监视,然后返回。至于错误1607,你从哪里得到的?安装时?启动时?您是否搜索过 1607 错误是什么?
标签: c# multithreading service process threadpool