返回信息流目前要做一个虚拟钢琴的演示功能,琴键按琴谱顺序闪烁,同时发出相应声音,这段代码主要用于一开始做的琴键按顺序闪烁的动画,用透明度Opacity实现闪烁效果
private void DisplayInstructions()
{
Storyboard instructionsSequence = new Storyboard();
DoubleAnimationUsingKeyFrames animation;
for (int i = 0; i < this.instructionSequence.Length; i++)
{
this.instructionSequence[i].ApplyAnimationClock(FrameworkElement.OpacityProperty, null);
animation = new DoubleAnimationUsingKeyFrames();
animation.FillBehavior = FillBehavior.Stop;
animation.BeginTime = TimeSpan.FromMilliseconds(i * 700);
Storyboard.SetTarget(animation, this.instructionSequence[i]);
Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity"));
instructionsSequence.Children.Add(animation);
animation.KeyFrames.Add(new EasingDoubleKeyFrame(0.3, KeyTime.FromTimeSpan(TimeSpan.Zero)));
animation.KeyFrames.Add(new EasingDoubleKeyFrame(1, KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(500))));
//这两行是我后来加进去希望能发声的 press(i);
// Thread.Sleep(700);
}
里面instructionsequence[i]是设置好的按琴谱顺序,press(i)是我后来加进去的,是设置好的键盘映射presskey可以直接使后台程序发声的,但是Thread.Sleep实在不知道该怎么放,我把它这样放在琴键动画的for循环里,运行出来还是先几声有间隔的全部响完琴键才开始闪烁,两个不同步,是什么问题,有办法么?
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3826同步于 2012/7/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖
Thread.Sleep的问题
yangjw629
2012/7/11镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
【 在 iFadeToBlack 的大作中提到: 】
: 音乐播放和动画放到两个线程里,你不会希望它们在一个线程里工作的
就是放在两个线程里运行时候怎么让他们同时工作呢?
不同线程里的东西可以看作是同时运行的
最简单就在渲染(动画)线程里通知声音线程播放音效就好了
【 在 yangjw629 的大作中提到: 】
: 就是放在两个线程里运行时候怎么让他们同时工作呢?
把
Thread.Sleep(700);
改成
StopWatch sw = new StopWatch();
sw.Start();
do while(sw.ElapsedMiliseconds<700){
Application.DoEvents();
}
C#不太会写,大概是这么个意思。。。
Dim sw As New Stopwatch
sw.Start()
Do While (sw.ElapsedMilliseconds < 7000)
Application.DoEvents()
Loop
VB代码是这么写,主要作用就是在暂停的时候可以让程序继续分发处理事件
【 在 duvet 的大作中提到: 】
: 把
: Thread.Sleep(700);
: 改成
: ...................