【发布时间】:2015-02-26 00:06:45
【问题描述】:
我对 VB .net 还是很陌生,我正在尝试编写一个程序来不断监视从 PLC 提取的信息并在它发生变化时更新。
我使用过一些微控制器,我知道制作无限循环效果很好。我的 VB .net 代码遇到的问题是,当它循环时,表单基本上会冻结,标签永远不会更新。我尝试使用下面的代码。
Do While True
*Code*
Loop
所以,我想我的第一个问题是,有一个持续的程序来更新数据的最佳方法是什么。似乎无限循环不是答案。
我的第二个问题是,像微控制器一样,是否可以让 VB .net 成为中断驱动程序而不是事件驱动程序。我的程序一直在运行,更新数据,但如果按下按钮,它基本上可以跳出循环。或者我的想法,暂时离开循环执行另一个功能,然后继续回到循环中。
我查看了 System.Timers 命名空间,但并不是 100% 清楚它们是如何工作的。这似乎是我问题的潜在答案。如果我有一个每隔一秒执行一次代码的计时器,那么只要表单运行正确,这一秒就会发生?假设前面的语句是正确的,如果代码从 1 秒滴答开始运行,并且在该代码运行时按下按钮,该按钮将被忽略,还是在代码完成后发生事件。
任何能帮助我学习的东西都会非常受欢迎!
【问题讨论】:
-
使用线程或后台工作者
-
正如@Plutonix 所说,您可以通过将循环放在另一个线程中来保持 UI 响应。或者(更符合您的“中断驱动”想法)您可以使用 Timer 定期检查数据。当数据可用时,无论您做什么“从 PLC 提取信息”都可能引发事件,在这种情况下,最好的方法是处理该事件。
-
谢谢!我还没有时间看线程,我会在一天结束时做两件事,但后台工作人员似乎是我正在寻找的。此外,我获取信息的方式不会引发事件,这会很棒,因为我没想过要检查它。不过感谢您的建议!干杯!
-
我为this question 编写了一个多线程示例,可能会对您有所帮助。
-
嘿,谢谢你的例子!我最终坚持使用 BackGroundWorker。这很简单,做了需要做的事情。感谢大家提供的所有新信息,现在我的火力更强了!
标签: vb.net