C# 如何持续刷新计时器以检查背景对象值&;根据对象状态执行某些操作
我需要一个不断刷新的计时器来检查背景对象值(比如说每10秒一次),并根据C#Winforms应用程序中的对象状态执行一些操作 我对使用C# 如何持续刷新计时器以检查背景对象值&;根据对象状态执行某些操作,c#,multithreading,winforms,timer,mvp,C#,Multithreading,Winforms,Timer,Mvp,我需要一个不断刷新的计时器来检查背景对象值(比如说每10秒一次),并根据C#Winforms应用程序中的对象状态执行一些操作 我对使用System.Timers.Timer和System.Threading.Timer有点困惑 此外,如果还有其他更好的解决方案,我将不胜感激 我面临的第一个问题是,我无法在初始化功能块中创建计时器-它会引发运行时对象引用异常。 因此,我不得不将其移动到执行LoadData()的部分。 (见下文) 到目前为止,我正在做的是: //This function gets
System.Timers.Timer
和System.Threading.Timer
有点困惑
此外,如果还有其他更好的解决方案,我将不胜感激
我面临的第一个问题是,我无法在初始化功能块中创建计时器-它会引发运行时对象引用异常。
因此,我不得不将其移动到执行LoadData()
的部分。
(见下文)
到目前为止,我正在做的是:
//This function gets called only at initialize time
void Initialize()
{
//Initializing Commands , Context , base. ()_stuff etc goes here
}
//This function is called both when page is initialized first time
// as well as whenever Refresh button on the page is hit to reload the data
private void LoadData()
{
//Data Load Stuff Here
// My Timer goes Here
_poller = new System.Threading.Timer(o => RefreshStatus(), null, 10000, 10000);
} //End LoadData()
我想回答4个问题:-
1) 我应该使用哪个计时器
(System.Timers.Timer
或System.Threading.Timer
或System.Windows.Forms.Timer
或任何其他)
2) 为什么我不能证明Initialize()部分中的代码与LoadData()部分中的代码相同
仅供参考,我使用的是MVP模式的松散解释
3) 由于每次加载、重新加载或刷新页面时我都会创建一个新的计时器实例,因此我是否需要通过调用dispose或删除计时器的前一个实例或将其设置为null来担心GC
仅供参考,_poller是类/表单级别的对象。
我不希望出现多个计时器开始在同一表单/页面中运行的情况
4) 无论我在哪里读到计时器最佳实践用法,他们都主张在开始时使用无限超时,然后将其更新为用户所需的值。
这样做的具体好处是什么?
而且,一旦加载完数据,我就没有一个固定的位置可以设置超时。在这种情况下我该怎么办?“他们都主张在开始时使用无限超时,然后将其更新为用户所需的值”——谁说?你可以从禁用它开始;设定时间间隔;然后
Start()
it。它不是自动启动的吗?(我观察到它对我有用)>=>P.S.->就像我之前说过的,除了加载块之外,这个页面没有任何特定的位置,我可以在那里更改计时器的任何属性;它们都是基于事件的函数调用,根据是否触发事件,这些函数可能会被调用,也可能不会被调用。这意味着理论上,我的计时器将不会启动,直到太晚,或者如果我选择的事件没有被触发,可能根本不会启动。已启用属性。默认值为false
。考虑到您正在制作一个WinForms
应用程序,您可能应该使用它。其他的不需要消息泵。