2017-04-06 66 views
-1

具有问题,我有一个非常简单的if语句设置了几个变量,每次经过的陈述时间。我有一个问题,当它到达AgentsAvailable == 0或打else声明不能恢复到任何先前的陈述。有人可以通过某种方式提供一些帮助,以使语句在每次声明为真时都能正常循环,并且不会卡住。打破了我的if语句

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)); 
    })); 
} 
+2

是什么_revert回到前面任何statements_的是什么意思? –

+2

这是循环吗?我看不出它如何能“每一次的发言有一个为真循环正常” – Nived

+0

也许OP正在寻找['break'(https://msdn.microsoft.com/en-us/library/adbctzc4。 ASPX),但问题远未明朗... – Pikoh

回答

1

好像有什么if-else语句有尽而意混乱。
它们不是循环。他们的目的是为执行特定的代码提供条件。满足条件的第一种情况(返回true)将被执行,而所有其他情况不会。如果你定义了一个else的情况,它将在所有上述情况都失败时执行。 关于此的官方文档可以在here找到。

总结:每次您拨打以上if-else声明,只会执行一个的情况。回到上面的情况是不打算的。
如果您更详细地解释您正在尝试做什么,我可以提供进一步的帮助。

此外,我看到了很多重复的代码在你的情况下(例如最后两个似乎是相同的,使得第一过时)。你应该尽量减少这个。

1

这与您的条款的顺序,而事实上,计算结果为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 
}