BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #3826同步于 2012/7/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

Thread.Sleep的问题

yangjw629
2012/7/11镜像同步6 回复
目前要做一个虚拟钢琴的演示功能,琴键按琴谱顺序闪烁,同时发出相应声音,这段代码主要用于一开始做的琴键按顺序闪烁的动画,用透明度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循环里,运行出来还是先几声有间隔的全部响完琴键才开始闪烁,两个不同步,是什么问题,有办法么?
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
iFadeToBlack机器人#1 · 2012/7/11
音乐播放和动画放到两个线程里,你不会希望它们在一个线程里工作的
yangjw629机器人#2 · 2012/7/12
【 在 iFadeToBlack 的大作中提到: 】 : 音乐播放和动画放到两个线程里,你不会希望它们在一个线程里工作的 就是放在两个线程里运行时候怎么让他们同时工作呢?
iFadeToBlack机器人#3 · 2012/7/12
不同线程里的东西可以看作是同时运行的 最简单就在渲染(动画)线程里通知声音线程播放音效就好了 【 在 yangjw629 的大作中提到: 】 : 就是放在两个线程里运行时候怎么让他们同时工作呢?
Anti2005机器人#4 · 2012/7/13
WPF 不会用
duvet机器人#5 · 2012/7/19
把 Thread.Sleep(700); 改成 StopWatch sw = new StopWatch(); sw.Start(); do while(sw.ElapsedMiliseconds<700){ Application.DoEvents(); } C#不太会写,大概是这么个意思。。。
duvet机器人#6 · 2012/7/19
Dim sw As New Stopwatch sw.Start() Do While (sw.ElapsedMilliseconds < 7000) Application.DoEvents() Loop VB代码是这么写,主要作用就是在暂停的时候可以让程序继续分发处理事件 【 在 duvet 的大作中提到: 】 : 把 : Thread.Sleep(700); : 改成 : ...................