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

C# Timer组件无法修改double类型值问题排查求助

问题原因及解决方法

你的问题核心出在变量作用域上:每次timer1_Tick触发时,你都在方法内部重新定义并初始化了friendlylat、friendlylng等变量。这意味着每次Tick里修改的都是临时局部变量,下一次触发Tick时,这些变量会被重新赋值为初始固定值,所以看起来数值始终没变化。

修改方案:

  1. 将需要持续更新的变量移到类的成员位置,而非Tick方法内部:
// 在类的顶部定义成员变量
private double enemnylat = 51.97840583915594;
private double enemnylng = 0.35796410164283465;
private double friendlylat = 52.19119384412198;
private double friendlylng = 0.93958379542825944;
  1. 调整timer1_Tick方法,移除内部的变量定义,直接使用类成员变量:
private void timer1_Tick(object sender, EventArgs e)
{
    cords.Text = map.Position.ToString();
    PointLatLng enemny = new PointLatLng(enemnylat, enemnylng);
    PointLatLng friendly = new PointLatLng(friendlylat, friendlylng);
    double markerDist = GMap.NET.MapProviders.EmptyProvider.Instance.Projection.GetDistance(enemny, friendly);
   
    if (markerDist < 1e-6) // 用极小值替代==判断,避免浮点精度误差
    {
        miles.Text = "At Destination";
    } 
    else
    {
        miles.Text = "Miles: " + markerDist.ToString();
        friendlylat = friendlylat - 0.1;
        friendlylng = friendlylng - 0.1;
        if (enemnylat >= friendlylat && enemnylng >= friendlylng)
        {
            friendlylat = friendlylat - 0.1;
            friendlylng = friendlylng - 0.1;
        }
        else if (enemnylat <= friendlylat && enemnylng <= friendlylng)
        {
            friendlylat = friendlylat + 0.1;
            friendlylng = friendlylng + 0.1;
        }
    }
}

额外提示:直接用==判断double值是否相等容易出现精度误差,建议改用判断数值是否小于一个极小值(如1e-6),避免逻辑误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:50:26