Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我正在编写一个C#windows服务,以不断地从4个不同的硬件设备读取数据。带循环/休眠的计时器或线程?_C#_Windows_Service_Timer_Camera - Fatal编程技术网

I';我正在编写一个C#windows服务,以不断地从4个不同的硬件设备读取数据。带循环/休眠的计时器或线程?

I';我正在编写一个C#windows服务,以不断地从4个不同的硬件设备读取数据。带循环/休眠的计时器或线程?,c#,windows,service,timer,camera,C#,Windows,Service,Timer,Camera,我正在编写一个Windows服务,在后台运行并读取4个独立USB摄像头模块的数据(通过提供的C#sdk),这些模块通过硬件从外部触发。我想制作相对模块化的部件,这样我们可以轻松地使用更多或更少的摄像头模块。因此,我可能会创建一个“camera reader”类,并在服务上下文中创建所需的数量。为了计时,我还需要一个单独的实体来获取收集的所有图像并将其写入磁盘 我以前没有开发过Windows服务或编写过C#,现在的问题是:让这样一个类包含计时器对象和tick函数,与让类启动线程循环检查摄像头并计算

我正在编写一个Windows服务,在后台运行并读取4个独立USB摄像头模块的数据(通过提供的C#sdk),这些模块通过硬件从外部触发。我想制作相对模块化的部件,这样我们可以轻松地使用更多或更少的摄像头模块。因此,我可能会创建一个“camera reader”类,并在服务上下文中创建所需的数量。为了计时,我还需要一个单独的实体来获取收集的所有图像并将其写入磁盘

我以前没有开发过Windows服务或编写过C#,现在的问题是:让这样一个类包含计时器对象和tick函数,与让类启动线程循环检查摄像头并计算睡眠周期以定期执行任务相比,有什么真正的区别吗?我一直在寻找的Windows服务示例都使用计时器来执行正在进行的后台任务

对于写入磁盘的实体,我有同样的问题。这也可能是另一个计时器或线程,尽管我倾向于线程,因为我有一个带有信号量的队列,让它从中提取工作

两种方法都可以正常工作(只要您不使用需要消息循环才能工作的
System.Windows.Forms.Timer

这就是计时器的含义:

.NET Framework类库包括四个名为Timer的类,每个类提供不同的功能:

  • System.Timers.Timer,它触发事件并定期在一个或多个事件接收器中执行代码该类旨在用作多线程环境中基于服务器的组件或服务组件;它没有用户界面,在运行时不可见。

  • System.Threading.Timer,它定期在线程池线程上执行单个回调方法。回调方法是在实例化计时器时定义的,不能更改与System.Timers.Timer类类似,该类旨在用作多线程环境中基于服务器的组件或服务组件;它没有用户界面,在运行时不可见。

  • System.Windows.Forms.Timer是一个Windows窗体组件,它触发事件并定期在一个或多个事件接收器中执行代码。该组件没有用户界面,设计用于单线程环境

  • System.Web.UI.Timer,一个ASP.NET组件,以固定间隔执行异步或同步网页回发

所以,用任何能让你的船漂浮的东西

至于将数据写入磁盘,有一个专门的线程来保持队列并一次一个地将文件写入,这对我来说很好