【发布时间】:2011-04-17 22:06:36
【问题描述】:
我正在使用 .NET 框架 3.5 版在 C#.NET 中开发一个项目。
我的项目有一个名为 Focuser.cs 的类,它代表一个物理设备,一个望远镜聚焦器,它可以通过串行 (RS-232) 端口与 PC 通信。我的类(Focuser)具有诸如 CurrentPosition、CurrentTemperature 等属性,它们表示可以随时更改的焦点的当前条件。因此,我的 Focuser 类需要不断地轮询设备以获取这些值并更新其内部字段。我的问题是,执行此连续轮询序列的最佳方法是什么?有时,用户需要将设备切换到不同的模式,这需要能够停止轮询、执行某些操作,然后恢复轮询。
我的第一次尝试是使用每 500 毫秒滴答一次的时间,然后调用一个后台工作人员,该工作人员轮询一个位置,然后返回一个温度。如果后台工作人员忙,则计时器计时时,它会返回并在 500 毫秒后再次尝试。有人建议我一起摆脱后台工作人员,只在计时器滴答事件中进行民意调查。因此,我将计时器的 AutoReset 属性设置为 false,然后在每次轮询完成时重新启动计时器。这两种技术在我的应用程序中的行为方式似乎完全相同,所以我不确定一种是否比另一种更好。每次我想使用新的 ThreadStart 和所有这些进行轮询操作时,我也尝试创建一个新线程。这似乎也很好用。
我应该提一件事。此类是 COM 对象服务器的一部分,这基本上意味着生成的类库将通过 COM 调用。我不确定这是否对答案有任何影响,但我只是想我应该把它扔在那里。
我问这一切的原因是我的所有测试工具运行和调试构建工作都很好,但是当我进行发布构建并尝试从另一个应用程序调用我的类时,该应用程序冻结了,我我很难确定原因。
任何意见、建议、cmets 将不胜感激。
谢谢,乔丹
【问题讨论】:
标签: c# .net multithreading com