You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForm下TimeCounter倒计时归零如何触发Form1自动重新下载

实现方案

你可以通过自定义事件实现低耦合的触发逻辑,不需要修改原有倒计时核心逻辑,3步即可完成:


步骤1:在TimeCounter类中声明并触发自定义事件

首先在你的TimeCounter类内部添加事件定义,找到倒计时归零的逻辑节点触发事件:

public class TimeCounter : Label
{
    // 新增:定义归零事件
    public event Action CountdownCompleted;

    // 你原有倒计时逻辑的代码...
    private void Timer_Tick(object sender, EventArgs e)
    {
        ts = ts.Subtract(TimeSpan.FromSeconds(1));
        this.Text = ts.ToString(@"hh\:mm\:ss");

        if (ts <= TimeSpan.Zero)
        {
            ts = TimeSpan.FromSeconds(300);
            // 新增:归零后触发事件,没有订阅者的话不会执行
            CountdownCompleted?.Invoke();
        }
    }
}

步骤2:在Form1中订阅TimeCounter的事件

在Form1的构造函数、Load事件或者btnStart点击逻辑中,订阅TimeCounter实例的CountdownCompleted事件:

// 假设你的Form1中TimeCounter实例名为timeCounter1
public Form1()
{
    InitializeComponent();
    // 订阅倒计时归零事件
    timeCounter1.CountdownCompleted += TimeCounter1_CountdownCompleted;
}

// 事件处理方法
private void TimeCounter1_CountdownCompleted()
{
    // 直接调用你的下载方法即可
    DownloadImages();
}

注意事项

  • 如果DownloadImages是耗时IO操作,建议改为异步实现(方法返回Task,内部用await执行下载逻辑),避免阻塞UI线程导致倒计时卡顿
  • 该实现不会影响原有倒计时的自动重置逻辑,每次归零都会自动触发一次下载
  • 如果需要给下载方法传递参数,可将Action委托改为对应泛型版本,比如Action<DownloadParams>即可自定义传参

内容的提问来源于stack exchange,提问作者Daniel Lip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:15:03