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
相关产品推荐
相关产品推荐

