代码之家  ›  专栏  ›  技术社区  ›  cschol

定期更新屏幕数据的模式

  •  2
  • cschol  · 技术社区  · 14 年前

    我是GUI编程的新手,我正在使用IronPython和WinForms编写一个小GUI应用程序。它从外部设备读取值并在ListView组件(名称、值)中显示它们。我想定期以固定的速率读取和更新ListView组件。

    • 一个计时器,它直接在OnTick处理程序中周期性地触发读取/屏幕更新
    • 计时器,其OnTick处理程序触发BackgroundWorker执行读取/更新

    是否有某种设计模式或更好的方法来完成屏幕数据的读取/更新?

    注意 :任何代码示例都可以是IronPython或C#。从C#到IronPython的转换非常直接。谢谢!

    3 回复  |  直到 14 年前
        1
  •  3
  •   Rob Fonseca-Ensor    14 年前

    就我个人而言,我有一个线程负责从设备中读取值并将数据存储在数据结构中,然后 System.Windows.Forms.Timer (有3个 Timer 在.NET中,这是唯一一个在线程中打勾的线程(可以安全地更新控件),以便从该数据结构中读取值并更新UI。可能需要同步该数据结构,但可能不需要。

        2
  •  2
  •   user333306 user333306    14 年前

    这个 BackgroundWorker

    使用 Timer

    它不会阻塞用户界面。 (别忘了更新UI线程上的控件)

    System.Threading.Thread newThread;
    newThread = new System.Threading.Thread(anObject.AMethod);
    

    http://msdn.microsoft.com/fr-fr/library/ms173178(VS.80).aspx

        3
  •  1
  •   Chris Taylor    14 年前

    另一种方法是使用 System.Threading.Timer ,这将定期在线程上执行您的方法,并且一旦您有了可以使用的数据 Control.Invoke