C# 在我的If声明中出现问题

C# 在我的If声明中出现问题,c#,C#,我有一个相当简单的if语句,每次通过该语句时都会设置几个变量。我遇到一个问题,当它到达AgentsAvailable==0或点击else语句时,它无法恢复到以前的任何语句。是否有人可以提供一些帮助,使语句在每次其中一条语句为真时都能正确循环,并且不会卡住 我的if语句: if (e.CmsData.Skill.AgentsAvailable > 0) { Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =&

我有一个相当简单的
if
语句,每次通过该语句时都会设置几个变量。我遇到一个问题,当它到达
AgentsAvailable==0
或点击
else
语句时,它无法恢复到以前的任何语句。是否有人可以提供一些帮助,使语句在每次其中一条语句为真时都能正确循环,并且不会卡住

我的
if
语句:

if (e.CmsData.Skill.AgentsAvailable > 0)
{
    Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => {
        callsWaitingData.Text = e.CmsData.Skill.AgentsAvailable.ToString();
        callsWaitingData.Foreground = new SolidColorBrush(Colors.Green);
        callsWaitingText.Text = "Available";
        longestWaitingData.Text = max.ToString();
        longestWaitingText.Text = "Available";
        callimgae.Source = new BitmapImage(new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_green.png", UriKind.Absolute));
    }));
}
else if (e.CmsData.Skill.InQueueInRing > 5)
{
    Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => {
        callsWaitingData.Text = e.CmsData.Skill.InQueueInRing.ToString();
        callsWaitingData.Foreground = new SolidColorBrush(Colors.Red);
        callsWaitingText.Text = "Waiting";
        longestWaitingData.Text = e.CmsData.Skill.OldestCall.ToString().Substring(3);
        longestWaitingText.Text = "Waiting";
        timer = new System.Threading.Timer(OnTimerEllapsed, new object(), 0, 2000);
    }));
}
else if (e.CmsData.Skill.InQueueInRing > 0)
{
    Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => {
        callsWaitingData.Text = e.CmsData.Skill.InQueueInRing.ToString();
        callsWaitingData.Foreground = new SolidColorBrush(Colors.Red);
        callsWaitingText.Text = "Waiting";
        longestWaitingData.Text = e.CmsData.Skill.OldestCall.ToString().Substring(3);
        longestWaitingText.Text = "Waiting";
        callimgae.Source = new BitmapImage(new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_red.png", UriKind.Absolute));
    }));
}
else if (e.CmsData.Skill.AgentsAvailable == 0)
{
    Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action) (() =>
    {
        callsWaitingData.Text = e.CmsData.Skill.AgentsAvailable.ToString();
        callsWaitingData.Foreground = new SolidColorBrush(Colors.Yellow);
        callsWaitingText.Text = "Available";
        longestWaitingData.Text = max.ToString();
        longestWaitingText.Text = "Available";
        callimgae.Source =
            new BitmapImage(
                new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_yellow.png",
                    UriKind.Absolute));
    }));
}
else
{
    Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action) (() =>
    {
        callsWaitingData.Text = e.CmsData.Skill.AgentsAvailable.ToString();
        callsWaitingData.Foreground = new SolidColorBrush(Colors.Yellow);
        callsWaitingText.Text = "Available";
        longestWaitingData.Text = max.ToString();
        longestWaitingText.Text = "Available";
        callimgae.Source =
            new BitmapImage(
                new Uri("pack://application:,,,/ScoreBoardClientTest;component/images/circle_yellow.png",
                    UriKind.Absolute));
    }));
}

如果else语句打算执行什么操作,则似乎存在混淆。
它们不是循环。它们的目的是为特定代码的执行提供条件。满足条件的第一种情况(return
true
)将被执行,而所有其他情况都不会执行。如果您定义了一个
else
案例,则当上述所有案例都失败时,将执行该案例。 有关这方面的官方文件可以找到

总结:每次调用上述
if-else
语句时,只执行一个案例。返回上述案例并非有意的。
如果您对您试图做的事情给出更详细的解释,我可以提供进一步的帮助。


此外,我在您的案例中看到许多重复的代码(例如,后两个似乎相同,使第一个过时)。您应该尽量减少这种情况。

这与子句的顺序有关,并且第一个计算结果为
true
的条件是唯一将执行的块。如果您希望应用前面的一些条件,而不管是否
AgentsAvailable==0

// *** Agents available logic ***
if (e.CmsData.Skill.AgentsAvailable > 0)
{
    // Stuff that needs to happen if Agents are available
}
else
{
    // Stuff that needs to happen if they're not available
}

// *** Queue ring logic *** (happens regardless of agents available
if (e.CmsData.Skill.InQueueInRing > 5)
{
}
else if (e.CmsData.Skill.InQueueInRing > 0)
{
}
else
{
}
如果只有在有代理可用时才需要执行某些操作,并且排队中的
InQueueInRing
>5
,则需要在其中一个
If
子句中添加这些操作,例如:

if (e.CmsData.Skill.InQueueInRing > 5)
{
    if (e.CmsData.Skill.AgentsAvailable > 0)
    {
        // Do stuff here that requires agents available
    }
    else
    {
        // If there's some counterpart logic for when 
        // no agents are available, do it here
    }

    // Do other stuff here that doesn't care about agents one way or the
    // other (i.e. stuff that should ALWAYS happen when InQueueInRing > 5
}

还原到前面的任何语句意味着什么?这是一个循环吗?我不明白它如何“每次一个陈述为真时都能正确循环”也许OP在寻找,但问题还远没有弄清楚……如果你想测试,你需要围绕这个循环,例如。,
e.CmsData.Skill.AgentsAvailable>0
在第一次出现错误后再次出现。好吧……这里是编程新手,我的术语不好。这我已经知道了。中断可能是我想要的,但我以前从未在If语句中使用中断,只是在case语句中。我应该把它改成一个Case而不是If语句吗?