账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    为什么进度条控件在循环中增长需要下一次在循环中调取外部方法时, 才会增长.
    41
    0
    if (isCreate)
    {
        bool bCreateDWGSuccess = Interop.ByCirAndLineCreSweptSolid(dicCablePoint.ToList()[iKrkuCable].Key, mPointList);
        if (bCreateDWGSuccess)
            iSuccess++;
        else
            listVoidCable.Add(dicCablePoint.ToList()[iKrkuCable].Key);
    }
    else
    {
        listVoidCable.Add(dicCablePoint.ToList()[iKrkuCable].Key);
    }
    mPointList.Clear();
    frmMatte.mFrmInstance.ProgressStep();

    前提: 上图的if判断被for循环包围
    frmMatte.g_frmInstance.ProgressStep(); 的意思是进度条+1, 如下代码, 这些只是部分代码.

    /// <summary>
    /// 设置外部调用的参数名
    /// </summary>
    public static frmMatte mFrmInstance = null;
    
    /// <summary>
    /// 设置进度条总长度
    /// </summary>
    public static int mProgressBarTotal;
    
    /// <summary>
    /// 进度条增长
    /// </summary>
    internal void ProgressStep()
    {
        Invoke(new Action(() =>
        {
            pBar.PerformStep();
            //Refresh();
        }));
    }

    这个if判断isCreate是否为True, 是则调用ByCirAndLineCreSweptSolid(), 否则不调用.
    但是无论如何都会调进度条++的方法.
    BUG出现在: 假设目前是第一次循环, 调用了进度条++的方法, 这个时候进度条不会增长. 而是等到第二次循环时调用ByCirAndLineCreSweptSolid()方法的瞬间才增长. 第二次循环就等第三次才增长.
    如果第三次isCreate为false则等到第四次, 如果一直为false那就进度条直到结束都不增长.
    然后我在else处也写了ByCirAndLineCreSweptSolid()这个方法, 发现还是不行, 必须等到了if判断true的地方调用ByCirAndLineCreSweptSolid(), 上一次或者上上一次的进度条增长方法使进度条增长才会生效.

    所以, 有没有人知道这个问题为什么会出现的么.

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 进度条控件在循环中增长需要在下一次循环中调用外部方法时才会增长,因为每次循环都会调用一个UpdateProgress方法。这个方法会在进度条达到新的进度值时调用,因此每次进度条的值都会增加。

      例如,如果你有一个定时器,每次定时器更新进度条时,都会调用UpdateProgress方法来增加进度条的值。如果进度条没有达到新的进度值,那么进度条就会一直保持在上一次的值,而不是每次循环时都增长。

      如果你想让进度条每次循环时都增长,你可能需要重新设计你的程序,使其能够处理这种情况。例如,你可以创建一个全局变量来存储进度条的值,然后在每次循环时都检查这个变量的值是否达到了新的进度值。如果是,就调用UpdateProgress方法来增加进度条的值。如果不是,就等待下一次循环。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部