Video Exception

I am attempting to put a Pause on click inside a WhilePlaying tag for a video and it does not permit it could anyone explain why? and maybe provide a solution, I would appreciate any help.

Code:

Stack trace: Preview detected an unhandled exception: System.InvalidOperationException: Collection was modified; enumeration operation may not execute. at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) at System.Collections.Generic.List1.Enumerator.MoveNextRare() at System.Collections.Generic.List1.Enumerator.MoveNext() at Fuse.Triggers.WhilePlaying.SetState(Node n, Boolean playing) in C:\ProgramData\Uno\Packages\Fuse.Triggers\0.26.10\$.uno#22:line 1907 at Fuse.Video.VideoVisual.ResetTriggers() in C:\ProgramData\Uno\Packages\Fuse.Video\0.26.10\$.uno#5:line 713 at Fuse.Video.VideoVisual.OnPaused(Object sender, EventArgs args) in C:\ProgramData\Uno\Packages\Fuse.Video\0.26.10\$.uno#5:line 699 at Fuse.Video.VideoContainer.OnPaused() in C:\ProgramData\Uno\Packages\Fuse.Video\0.26.10\$.uno#2:line 263 at Fuse.Video.VideoContainer.Pause() in C:\ProgramData\Uno\Packages\Fuse.Video\0.26.10\$.uno#2:line 379 at Fuse.Controls.Video.Pause() in C:\ProgramData\Uno\Packages\Fuse.Controls\0.26.10\$.uno#56:line 6077 at Fuse.Triggers.Actions.Pause.Perform(Node target) in C:\ProgramData\Uno\Packages\Fuse.Triggers\0.26.10\Actions\$.uno#5:line 243 at Fuse.Triggers.Actions.TriggerAction.PerformFromNode(Node target) in C:\ProgramData\Uno\Packages\Fuse.Triggers\0.26.10\Actions\$.uno#9:line 492 at Fuse.Triggers.Trigger.SetPlayDirection(Int32 next) in C:\ProgramData\Uno\Packages\Fuse.Triggers\0.26.10\$.uno#15:line 1263 at Fuse.Triggers.Trigger.Activate(Action done) in C:\ProgramData\Uno\Packages\Fuse.Triggers\0.26.10\$.uno#15:line 1319 at Fuse.Triggers.Trigger.Pulse() in C:\ProgramData\Uno\Packages\Fuse.Triggers\0.26.10\$.uno#15:line 1370 at Fuse.Gestures.Clicked.OnClicked(PointerEventArgs args, Int32 clickCount) in C:\ProgramData\Uno\Packages\Fuse.Gestures\0.26.10\$.uno:line 59 at Fuse.Gestures.ClickerEventHandler.Invoke(PointerEventArgs args, Int32 count) at Fuse.Gestures.Clicker.OnPointerReleased(Object sender, PointerReleasedArgs args) in C:\ProgramData\Uno\Packages\Fuse.Gestures\0.26.10\Internal\$.uno:line 210 at Fuse.Input.PointerReleased.Invoke(PointerReleasedHandler handler, Object sender, PointerReleasedArgs args) in C:\ProgramData\Uno\Packages\FuseCore\0.26.10\Input\$.uno#6:line 820 at Fuse.NodeEvent`2.InvokeInternal(THandler handler, Object sender, TArgs args) in C:\ProgramData\Uno\Packages\FuseCore\0.26.10\$.uno#7:line 1141

Not a solution, but my 2 cents: I believe the exception actually comes from the fact that Pause will cause the WhilePlaying trigger to turn off, which in turn removes your Clicked handler, while the control is still evaluating it. I don’t think this should crash at least, but I’m not sure it’s correct either :slight_smile:

Seems about right, unfortunately I haven’t figured out how to call methods and access properties of the video from within JS so I guess I’m stuck. If anyone has any ideas I would appreciate anything that could help.

Have a look at this code: (should do the same as you are trying to do)

<ClientPanel>
        <DockPanel>
            <Video ux:Name="_video" Progress="{Property _slider.Value}" Margin="10" Dock="Fill" Url="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" IsLooping="true" >
                <WhilePlaying>
                    <Change _canPause.Value="true" />
                    <Change _canPlay.Value="false" />
                </WhilePlaying>
            </Video>
            <StackPanel Dock="Bottom" Margin="2">
                <Slider ux:Name="_slider" Minimum="0" Maximum="1" />
                <Panel>
                    <Rectangle Padding="10" CornerRadius="5">
                        <Text Value="Play" ux:Name="_text" TextAlignment="Center" />
                        <WhileTrue ux:Name="_canPause" Value="false">
                            <Set _text.Value="Pause" />
                            <Clicked>
                                <Pause Target="_video" />
                            </Clicked>
                        </WhileTrue>
                        <WhileTrue ux:Name="_canPlay" Value="true">
                            <Set _text.Value="Play" />
                            <Clicked>
                                <Resume Target="_video" />
                            </Clicked>
                        </WhileTrue>
                        <SolidColor Color="#0cf" />
                        <Stroke><SolidColor Color="#000" /></Stroke>
                        <WhilePressed>
                            <Scale Factor="0.8" Duration="0.1" DurationBack="0.2" Easing="ExponentialIn" EasingBack="ExponentialIn" />
                        </WhilePressed>
                    </Rectangle>
                </Panel>
            </StackPanel>
        </DockPanel>
</ClientPanel>