如何处理重复 System.Threading.Timer [重复]

Posted

技术标签:

【中文标题】如何处理重复 System.Threading.Timer [重复]【英文标题】:How to handle repeating System.Threading.Timer [duplicate] 【发布时间】:2021-04-22 19:13:05 【问题描述】:

我将System.Treading.Timer 用于Task,它正在检查一些服务器状态和设置标签。我想用按钮启动这个计时器(开始和重复)并在另一个按钮按下后停止它。但我无法做到这一点,我尝试使用AutoResetEvent 对象,但我无法理解它是如何工作的。以下是我的代码:

public class Main
    Timer StatusWatch;
    int WatchStatusTime = 500;
    AutoResetEvent WatchReset = new AutoResetEvent(false);

    public Main()
        StatusWatch = new System.Threading.Timer(StatusWatchCallBack, WatchReset,
            Timeout.Infinite, WatchStatusTime);
    

    private async void StatusWatchCallBack(object state)
    
        WatchReset.WaitOne();

        await Task.Run(() =>
        
            lblPlcStatus.Dispatcher.Invoke(() =>
            
                ...
                Timer work
                ...
            );
        );

        WatchReset.Set();
    

    public void  ButtonClick()
        if (client.Connected)
        
            client.Disconnect();
            lblConnect.Content = "Connect";
        
        else 
         
            if (client.ConnectTo(plc.IP, plc.Rack, plc.Slot) == 0)
            
                lblConnect.Content = "Disconnect";
                WatchReset.WaitOne();
            
                
        
    

我不知道如何启动这个计时器以及如何结束它。 AutoResetEvent 甚至可以用于这个吗?

【问题讨论】:

Task.Run 的原因是什么?这对我来说似乎是多余的。它所做的只是调用DispatcherTask.Run 主要用于将工作卸载到后台线程,我在提供的代码中看不到任何此类工作。 这是在 Winforms 中吗?如果是这样:让您的生活更轻松并使用System.Windows.Forms.Timer @TheodorZoulias 是的,这是多余的,谢谢 @Fildor WPF 我需要 Threading.Timer 因为它是异步的 好的,稍微复杂一点。但这里什么是异步? “定时器工作”? 【参考方案1】:

您只需使用Change 方法即可停止和重新启动System.Threading.Timer

StatusWatch.Change(Timeout.Infinite, Timeout.Infinite); // Stop

StatusWatch.Change(WatchStatusTime, WatchStatusTime); // Restart

【讨论】:

以上是关于如何处理重复 System.Threading.Timer [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter:当我插入数据时出现重复键错误,我该如何处理这个错误?

如何处理重复 System.Threading.Timer [重复]

你如何处理重复的街道后缀?

如何处理循环依赖? [重复]

Java:如何处理 servlet 中的多个会话 [重复]

如何处理 Alamofire 的异步特性 [重复]