【问题标题】:VB .net Infinite Loop/Interrupt DrivenVB .net 无限循环/中断驱动
【发布时间】: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


【解决方案1】:

你可以使用

Application.DoEvents()

- .NET 框架提供的方法,它实质上会更新您的表单以应用同时发生的所有更改。

【讨论】:

猜你喜欢
  • 2011-04-10
  • 1970-01-01
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多