所以我正在创建的闹钟中使用了一个动画,我最终将其归结为能够重置自己。但是现在第一次激活它,然后如果我再次输入闹钟唤醒时间,闹钟将会熄灭2次,如果我第三次输入它只会发出同样的事情,此时警报会熄灭3次。 / p>
以下是代码:
private void dispatcherTimer1_Tick(object sender, EventArgs e)
{
label1.Content = DateTime.Now.ToString("hh") + ":" + DateTime.Now.ToString("mm") + " " + DateTime.Now.ToString("t"+2);
}
//ALARM CLOCK
private void dispatcherTimer2_Tick(object sender, EventArgs e)
{
OpacityLower.Duration = new Duration(TimeSpan.FromSeconds(3));
OpacityLower.AutoReverse = false;
OpacityLower.To = 0.0;
OpacityRaise.Duration = new Duration(TimeSpan.FromSeconds(3));
OpacityRaise.AutoReverse = false;
OpacityRaise.To = 100.0;
//Alarm settings
if (label1.Content.Equals(label2.Content))
{
//ANIMATION
OpacityLower.Completed += (s, d) =>
{
//Actual Wake Up Call, of which i took out so nobody could get the code, also it not relevant to this,
TimeOfDayCB.Text = "";
HourAlarmCB.Text = "";
MinuteAlarmCB.Text = "";
label2.Content = null;
dispatcherTimer2.Stop();
label2.BeginAnimation(Label.OpacityProperty, OpacityRaise);
OpacityRaise.Completed += (z, c) =>
{
TimeOfDayCB.Text = "";
HourAlarmCB.Text = "";
MinuteAlarmCB.Text = "";
label2.Content = null;
dispatcherTimer2.Stop();
};
};
label2.BeginAnimation(Label.OpacityProperty, OpacityLower);
dispatcherTimer2.Stop();
}
}
所以在看到我的代码后,如果你能告诉我为什么会发生这种情况,请忽略编写代码的严重程度......(我正在做一个等于凌乱编码的测试阶段)。
答案 0 :(得分:0)
您的问题很可能是您在此处不止一次订阅了各种活动:
//ANIMATION
OpacityLower.Completed += (s, d) =>
..在这里:
OpacityRaise.Completed += (z, c) =>
每次计时器滴答时......都会向队列中添加一个新事件。这就是为什么它们被称为MulticastDelegate
...它们可以有多个(以及你使用+=
追加的原因)。
幸运的是,修复很容易。您的事件实际上并不依赖于它周围的任何变量/代码。所以从您的计时器滴答中取出事件订阅,以便它们触发一次(也许在app启动时)它应该没问题。
*假设你的其余代码没有做类似的事情。
答案 1 :(得分:0)
所以最后我用这个网站帮我完成了代码:When an animation is completed
我刚用现有的“OpacityRaised”活动切换了故事板的活动!
制作了一个新的活动来收集所有警报唤醒信息并且它有效!