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

如何让变量在C#定时器循环中保留其值

问题修复方案

核心原因

你每次定时器触发时都会新建Collection实例,实例内部修改的是自身私有字段initialValueOffer,但静态类OfferVariables里的initialValueOfferFlowerLolitaCollections从未被更新。下次新建实例时,依然传入静态变量的初始值0,导致每次循环都重置。

两种修复方案

方案一:复用同一个Collection实例(推荐)

不要每次定时器触发都新建实例,提前初始化一次并保存,每次循环直接调用该实例的ExecuteAsync方法,这样实例内部的initialValueOffer会保留上次循环的修改值。

修改定时器相关代码:

// 静态变量保存Collection实例,避免每次新建
private static Collection _flowerLolitaCollections;

static async Task Main()
{
    // 初始化一次实例,传入静态变量的初始值
    _flowerLolitaCollections = new Collection(OfferVariables.initialValueOfferFlowerLolitaCollections /* 其他参数 */);
    
    timer = new Timer(TimeSpan.FromSeconds(10).TotalMilliseconds);
    timer.Elapsed += async (sender, e) => await TimerElapsedAsync();
    timer.Start();

    Console.WriteLine("Press Enter to exit.");
    Console.ReadKey();

    timer.Stop();
    timer.Dispose();
}

private static async Task TimerElapsedAsync()
{
    // 直接复用已创建的实例,无需每次新建
    await _flowerLolitaCollections.ExecuteAsync();
}

方案二:同步实例修改到静态变量

如果必须每次新建实例,需要在Collection的ExecuteAsync方法中,将修改后的initialValueOffer同步回静态类的变量,确保下次新建实例时能传入更新后的值。

修改Collection类的ExecuteAsync方法:

public async Task ExecuteAsync()
{
    // 原有代码
    if (bestOfferInCollection != initialValueOffer) 
    {
        if (/* 原有条件判断 */)
        {
            initialValueOffer = CalculateMyOfferNumber(2.5, 5, initialValueOffer);
            // 新增:将修改后的值同步到静态变量
            OfferVariables.initialValueOfferFlowerLolitaCollections = initialValueOffer;
            // 原有后续代码
        }
    }
    // 原有代码
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:00:22