我在servicebase中有2个服务,其中一个onstart方法是infinate循环(使用AsyncReadContext方式完成),但是当启动服务时,它启动的服务是列表中的第一个,并且永远不会进入第二个服务的启动。 一些代码:
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1(),
new Service 2(),
};
ServiceBase.Run(ServicesToRun);
ONSTART:
protected override void OnStart(string[] args)
{
//read MsMQ async way
}
服务1正在读取队列,但服务2没有读取队列。当我将服务2更改为列表中的第一个时,它的代码相同,然后服务2正在读取队列。这里两个服务的队列不同。
答案 0 :(得分:2)
你应该启动OnStart中的另一个线程 - 该方法可以完成实际的工作。
例如使用匿名方法:
var t = new Thread(new ThreadStart(() => {
//Actual work here
}));
t.Start();
这会导致OnStart方法立即完成,并且还应启动第二个服务。
答案 1 :(得分:0)
我的代码中存在问题。两个服务Service1和service 2,而不是由serviceinstaller安装。当我将serviceIntaller和ServiceInstaller更改为ProjectInstaller时。我是1093错误,服务无法启动,因为一旦我更改为服务问题的类名解析,服务的服务名称是相同的。