代码之家  ›  专栏  ›  技术社区  ›  Dark Star1

C#如何评估逻辑块?

  •  0
  • Dark Star1  · 技术社区  · 15 年前

    我有以下代码行:

        public bool dcpl_radar()
        {
            if (radar == null)
                return false;
            else
            {
                if (radar != null)
                {
                    if (radar.InvokeRequired)
                        radar.BeginInvoke(new MethodInvoker(delegate() 
                                                    { 
                                                        radar.Visible = false; 
                                                    }));
                    else
                        this.radar.Visible = false;
    
                    radar = null;
                }
                return true;
            }//end of else statement
        }
    

    但是VStudio一直在调用行上抛出错误。我已经检查了调试器和 是真的,但是VStudio正在尝试评估它不应该在其中的代码的一部分。有人能解释一下它为什么这样做吗?

    2 回复  |  直到 15 年前
        1
  •  4
  •   ChaosPandion    15 年前

    等一下。。。我想我们有比赛条件。 假设您开始唤醒,几乎立即将雷达设置为空。

    我想这应该能解决你的问题。

    public bool dcpl_radar()
    {
        if (radar != null)
        {
            if (radar.InvokeRequired)
            {
                radar.BeginInvoke(new MethodInvoker(HideRadar));
            }
            else
            {
                HideRadar();
            }
    
            return true;
        }
    
        return false;
    }
    
    private void HideRadar()
    {
        this.radar.Visible = false;
        this.radar = null;
    }
    
        2
  •  1
  •   Noon Silk    15 年前

    正在发生的事情:

    在您设置 radar 使无效。

    如何修复它

    public bool dcpl_radar()
    {
        if (radar == null)
            return false;
        else
        {
            if (radar != null)
            {
                if (radar.InvokeRequired)
                    radar.BeginInvoke(new MethodInvoker(delegate() 
                                                { 
                                                    radar.Visible = false; 
                                                    radar = null;
                                                }));
                else {
                    this.radar.Visible = false;
                    radar = null;
                }
    
    
            }
            return true;
        }//end of else statement
    }
    

    虽然我有点担心将变量设置为 null ,这通常是一个糟糕设计的标志。