我正在使用一个Windows服务,我们正在将设备连接到设备读取器。
1.服务需要所有离线设备
1.服务创建一个线程列表,并为每个设备创建一个线程和睡眠1秒。然后为另一个设备创建线程并将其添加到列表中。例如,如果有10个设备,其中7个在线,则将创建7个线程,差距为1秒。
1.之后,线程将睡眠5分钟,然后再次恢复,并重新检查离线设备,并将其添加到线程,如果有任何新的设备上线。
private static async void StartDeviceConnections()
{
Thread th = Thread.CurrentThread;
th.Name = "MainThread";
var threads = new List<Thread>();
var onlyOffline = false;
setupDeviceTimer();
setupSyncLogsTimer();
nextCycle:
try
{
var objDevice = new DeviceService();
objDevice.UpdateDeviceStatus(0, DeviceStatuses.Offline, "updateAll");
var devices = new DeviceService().GetOfflineIRISDevices();
if (devices != null && devices.Count > 0)
{
foreach (var device in devices)
{
Thread childThread = new Thread(new ThreadStart(delegate () { DeviceSyncManager(device); }));
childThread.Start();
childThread.Name = device.ipAddress;
threads.Add(childThread);
Thread.Sleep(1000);
}
}
}
catch (Exception e)
{
}
// wait for the next cycle
Thread.Sleep(MinutesToCheckDeviceStatusAgain * 60 * 1000);
onlyOffline = true;
goto nextCycle;
}
但它似乎是不工作的罚款,当我试图运行服务,我得到这个错误。
Windows无法在本地计算机上启动服务。错误1053:服务没有及时响应启动或控制
这段代码运行的唯一方法是注解后藤语句行。但是这样它将不会重新检查在线设备,并且不能保持在线状态。
我也试着改变睡眠的价值。时间真的很短,我不能尝试太多。我有另一个想法来修改代码,但这需要时间。
1条答案
按热度按时间h5qlskok1#
这是因为您的StartDeviceConnections永远不会结束。如果需要此代码连续运行,可以在另一个线程中执行。就像这样: