C# 定期更新屏幕数据的模式

C# 定期更新屏幕数据的模式,c#,winforms,ironpython,C#,Winforms,Ironpython,我是GUI编程的新手,我正在使用IronPython和WinForms编写一个小型GUI应用程序。它从外部设备读取值,并将其显示在ListView组件(名称、值)中。我希望以一定的固定速率定期执行ListView组件的读取和更新 我有以下想法来实现这一点: 计时器,它直接在OnTick处理程序中定期触发读取/屏幕更新 计时器,其OnTick处理程序触发BackgroundWorker执行读取/更新 由于第一个解决方案将阻止GUI,直到读取/更新循环完成,这取决于从设备读取的值的数量,可能需要

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

我有以下想法来实现这一点:

  • 计时器,它直接在OnTick处理程序中定期触发读取/屏幕更新
  • 计时器,其OnTick处理程序触发BackgroundWorker执行读取/更新
由于第一个解决方案将阻止GUI,直到读取/更新循环完成,这取决于从设备读取的值的数量,可能需要一些时间,因此我认为BackgroundWorker可能是更好的解决方案。我可能想添加一些功能,以便稍后操作ListView项(添加、删除值等),而阻止GUI似乎不是一个好主意

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


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

当您在后台有大量工作要做时,首选
BackgroundWorker

使用
计时器
触发在第二个线程中执行必要工作的函数

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


另一个选项是使用,而不是让计时器和后台工作线程工作,这将定期在线程上执行您的方法,并且一旦您有了可以使用或控制的数据。开始唤醒以更新UI线程中的控件。

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


这样,设备返回数据所需的时间就可以延长,或者它可以每秒向您推送数百万行,UI线程仍将以您预定的滴答频率(可能每100毫秒?)进行轮询。由于您的计时器滴答声只是从内存中读取数据,因此UI不会阻塞IO。

取决于您使用的计时器-winforms、threading和timer是选项。从C#到IronPython的转换非常简单。它是?我是一位非常有经验的Python开发人员,包括使用PyQt,我还使用JavaSwing工作了多年。不过,我很难将我从C#读到的关于WPF的内容解释成IronPython;
BackgroundWorker
就是最新的例子。您是否有针对Python开发人员的WPF提示资源?我还没想好怎么去想它。
System.Threading.Thread newThread;
newThread = new System.Threading.Thread(anObject.AMethod);